您的位置:首页 > 其它

[51nod-1441]士兵的数字游戏 题解

2017-09-24 15:40 399 查看
题目传送门

就是求每个素数因子的个数,然后用前缀和算出答案就好了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=a;i>=n;i--)
#define Clear(a,x) memset(a,x,sizeof(a))
#define ll long long
#define INF 2000000000
#define eps 1e-8
#define db double
using namespace std;
int read(){
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9') f=ch=='-'?-1:f,ch=getchar();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=5000005;
int sum[maxn];
bool flag[maxn];
void init(){
int tmp,i,j;
for (i=2;i<=maxn-5;i++)
if (!flag[i]){
for (j=i;j<=maxn-5;j+=i){
tmp=j;
while (tmp%i==0){
tmp/=i;
sum[j]++;
}
flag[j]=1;
}
}
rep(i,1,maxn-5)
sum[i]+=sum[i-1];
}
int main(){
int T=read();
int a,b;
init();
while (T--){
a=read(),b=read();
printf("%d\n",sum[a]-sum[b]);
}
return 0;
}


在51nod上要用visual c++交,比c++快了三倍(不知道这是为什么)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: