【codeforces 757E】Bash Plays with Functions
【题目链接】: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的更多相关文章
- 【codeforces 757B】 Bash's Big Day
time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...
- 【Codeforces 757B】 Bash's big day
[题目链接] 点击打开链接 [算法] 若gcd(s1,s2,s3....sk) > 1, 则说明 : 一定存在一个整数d满足d|s1,d|s2,d|s3....,d|sk 因为我们要使|s|尽可 ...
- 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 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 789C】Functions again
[题目链接]:http://codeforces.com/contest/789/problem/C [题意] 看式子. [题解] 考虑最后的答案区间; 如果那个区间是从奇数位置的数字开始的; 那么奇 ...
- 【30.49%】【codeforces 569A】Music
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 757A】Gotta Catch Em' All!
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 754B】 Ilya and tic-tac-toe game
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 604D】Moodular Arithmetic
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
随机推荐
- 【CodeForces 574B】Bear and Three Musketeers
[链接] 我是链接,点我呀:) [题意] [题解] 枚举每一条边(x,y) 然后再枚举y的出度z 看看g[x][z]是否等于1(表示联通) 如果等于1就说明找到了一个三元环,则尝试用它们的出度和-6更 ...
- 【hihocoder 1032】最长回文子串
[题目链接]:http://hihocoder.com/problemset/problem/1032 [题意] [题解] 原文地址:https://segmentfault.com/a/119000 ...
- EXPLAIN sql优化方法(3)DERIVED
派生表和视图的性能 从MySQL 4.1开始,它已经支持派生表.联机视图或者基本的FROM从句的子查询. 这些特性之间彼此相关,但是它们之间的性能比较如何呢? MySQL 5.0 中的派生表似乎和视图 ...
- Android中的WiFi P2P
Android中的WiFi P2P可以同意一定范围内的设备通过Wifi直接互连而不必通过热点或互联网. 使用WiFi P2P须要Android API Level >= 14才干够,并且不要忘记 ...
- ios假设写一个提示带动画的View,能够来引导用户行为
先上图: 这个UIView能够这样写: -(id)initWithFrame:(CGRect)frame backImage:(UIImage*)image msgStr:(NSString*)txt ...
- Hbase集群扩展
当hbase集群节点不够用时,我们须要新增节点来对集群进行扩展.hbase集群的扩展是非常easy的,过程例如以下: 一.准备一台新机器作为扩展节点,这里是作为slaves15,该机子要先与maste ...
- UITableView属性 自己定义UITableViewCell
UITableView的属性全齐.供大家參考 附:http://www.bubuko.com/infodetail-561085.html //曾经在使用UITableView的时候,总是在cell上 ...
- 2016.02.23,英语,《Vocabulary Builder》Unit 01
Bell:来源于拉丁语,含义为war.fight,其中Bellona [bә'lәunә]是罗马女战神的名字,她的丈夫是战神Mars.antebellum: [ˌænti'beləm] adj. 战前 ...
- 学习 shell —— 条件判断 if 的参数
1. 文件判断表达式 -e filename:如果 filename 存在(exist),则为真: -d filename:如果 filename 为目录(directory),则为真: -f fil ...
- 院校-美国:美国国立卫生研究院(NIH)
ylbtech-院校-美国:美国国立卫生研究院(NIH) 美国国立卫生研究院(简称NIH)位于美国马里兰州贝塞斯达(Bethesda),是美国最高水平的医学与行为学研究机构,初创于1887年,任务是探 ...