【题目链接】:http://codeforces.com/problemset/problem/757/E

【题意】



给你q个询问;

每个询问包含r和n;

让你输出f[r][n];

这里f[0][n]是n分解成两个数u,v的乘积的个数;

这里u和v互质;

而f[r][n]当r>0时,有个递推式;

【题解】



那个递推式等价于



即n的所有因子x的f[r][x]的和;

这里需要知道;

f[0][n]=2n的不同质因子个数

且容易得到

当a和b互质的时候,f[0][a*b]=f[0][a]*f[0][b];

则f[0]是积性函数;

有个定理就是;

如果是类似上面那个递推

如果且f为积性函数,则g也为积性函数;

则我们在算

f[r][n]的时候可以对n分解质因数;

即f[r][p1^q1*p2^q2…pm^qm];

这样p1^q1..p2^q2..pm^qm都是互质的了;

则可以利用积性函数把它们分解成

f[r][p1^q1]*f[r][p2^q2]..*f[r][pm^qm];

这里

f[0][p^q]的值除了q=0的时候为1之外,其他情况都为2,因为p是质数,可知不同的质因子个数只有1个,也即这个质数p;所以都是2^1;

q为0的时候,只有1,1这种情况,所以只有一对;为1;

(所以这里的p只要为质数,是几都无所谓,f[0]的值都一样)



根据

可知

f[r+1][pq]=∑f[r][p0..q]⋅⋅⋅①

因为p0..q都是pq的因子

这样其实就能看出来了,要算f[r][p^q]的时候,根本不需要知道p是多少;

f[r][p^q]只与q和r有关;

根据①式能够很容易写个dp;

具体的

g[0][0] = 1,g[0][1..n] = 2;

g[i][0] = g[i-1][0];

g[i][j]=∑g[i−1][0..j]

对于要算的

f[r][p1q1]∗f[r][p2q2]..∗f[r][pmqm];

直接输出

g[r][q1]∗g[r][q2]∗...∗g[r][qm]

就好;

在对n分解质因数的时候,好像用到了更牛逼的方式.

类似筛法的东西吧.

快速获取某个值的质因子;

(用cin竟然会超时…再也不用了!…还是算了吧,cin还是比较方便的,记住可能会因为这个超时就好…)



【Number Of WA】



5



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0),cin.tie(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e6;
const int MOD = 1e9+7; int dp[N+100][21],lp[N+10]; void pre()
{
lp[1] = 1;
rep1(i,2,N)
if (lp[i]==0)
for (int j = i;j<=N;j+=i)
lp[j] = i; rep1(i,1,20)
dp[0][i] = 2;
rep1(i,0,N)
dp[i][0] = 1;
rep1(i,1,N)
rep1(j,1,20)
dp[i][j] = (dp[i][j-1] + dp[i-1][j])%MOD;
} int main()
{
//Open();
pre();
int q;
scanf("%d",&q);
while (q--)
{
int r,n;
scanf("%d%d",&r,&n);
LL ans = 1;
while (n>1)
{
int cnt = 0,x = lp[n];
while (n%x==0)
{
cnt++;
n/=x;
}
ans = (ans*dp[r][cnt])%MOD;
}
printf("%lld\n",ans);
}
return 0;
}

【codeforces 757E】Bash Plays with Functions的更多相关文章

  1. 【codeforces 757B】 Bash's Big Day

    time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  2. 【Codeforces 757B】 Bash's big day

    [题目链接] 点击打开链接 [算法] 若gcd(s1,s2,s3....sk) > 1, 则说明 : 一定存在一个整数d满足d|s1,d|s2,d|s3....,d|sk 因为我们要使|s|尽可 ...

  3. Codeforces 757 E Bash Plays with Functions

    Discription Bash got tired on his journey to become the greatest Pokemon master. So he decides to ta ...

  4. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  5. 【codeforces 789C】Functions again

    [题目链接]:http://codeforces.com/contest/789/problem/C [题意] 看式子. [题解] 考虑最后的答案区间; 如果那个区间是从奇数位置的数字开始的; 那么奇 ...

  6. 【30.49%】【codeforces 569A】Music

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 【codeforces 757A】Gotta Catch Em' All!

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 【codeforces 754B】 Ilya and tic-tac-toe game

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. 【codeforces 604D】Moodular Arithmetic

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. 启动 Appium 自带模拟器

    1.先在sclipse中新建并打开一个设备 2.启动appium 3.安装apk 打开cmd  并在sdk安装目录的tools文件夹下输入安装命令adb install xxx.apk(在这之前需要把 ...

  2. HDU5924 Mr. Frog’s Problem

    /* HDU5924 Mr. Frog’s Problem http://acm.hdu.edu.cn/showproblem.php?pid=5924 数论 * */ #include <cs ...

  3. spring的几个重要类和接口

    1.datasource接口是javax.sql包下的接口,不是spring,是javax.sql下的 datasource接口有个重要的方法getConnection()方法 Connection ...

  4. 用Python实现简单的服务器

    socket接口是实际上是操作系统提供的系统调用.socket的使用并不局限于Python语言,你可以用C或者JAVA来写出同样的socket服务器,而所有语言使用socket的方式都类似(Apach ...

  5. POJ 1284

    想了很久,只想到枚举的方法,估计会超时吧. 原来有这样一条性质:p为素数,则p有phi(p-1)个原根 Orz... #include <iostream> #include <cs ...

  6. 在不同的浏览器下FORM及它的小伙伴们默认样式的CSS属性值是不全然一致

    我们一般在定义CSS样式的时候都须要定义去掉HTML标签默认样式的CSS,原因是在不同的浏览器以下它们的表现出来的默认样式不全然一致,我们要保证在不同的浏览器下它们能正常显示出我们想要达到的预期效果, ...

  7. 使用 python 读写中文json

    读写中文json )   输出中文的json. 通过使用 ensure_ascii=False,输出原有的语言文字.indent參数是缩进数量. 更改写文件格式 将上一步导出的 string 直接写文 ...

  8. 精美viso制图(1)

    office组件中的viso是一款十分强大的绘图工具,在绘制流程图.结构框图时显得十分方便,这里将我自己绘制的一些viso图(大部分都是用在我自己的论文中的)与大家分享一把. 1.深度学习训练流程图 ...

  9. php静态函数的使用场景

    php静态函数的使用场景 场景 代码 <?php class Conductor{ public static $i = 100; public function sold(){ $a = se ...

  10. 【POJ 2352】 Stars

    [题目链接] http://poj.org/problem?id=2352 [算法] 树状数组 注意x坐标为0的情况 [代码] #include <algorithm> #include ...