您的位置:首页 > 其它

codeforces 546D Soldier and Number Game

2015-12-06 12:06 513 查看
题目链接

这个题, 告诉你a, b的值, 那么只需要求出b到a之间的数, 每个数有多少个因子就可以。

具体看代码, 代码里面有解释

#include<bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
const int maxn = 5000005;
int p[maxn], c[maxn];
int main()
{
memset(p, 0, sizeof(p));
memset(c, 0, sizeof(c));
for(int i = 2; i<=maxn; i++) {
if(!p[i]) {
p[i] = i;
for(int j = i+i; j<=maxn; j+=i) {
p[j] = i;                //求出一个数的最大素因子
}
}
}
for(int i = 2; i<=maxn; i++) {
p[i] = p[i/p[i]]+1;             //这里, p[4]就等于p[2]+1, p[8] = p[8/2]+1 = p[4]+1这样类推就可以求出答案
c[i] = c[i-1]+p[i];
}
int t, a, b;
cin>>t;
while(t--) {
scanf("%d%d", &a, &b);
printf("%d\n", c[a]-c[b]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: