标签:
嗯。。在SPOJ上刷的第二题。
一开始不知道哪错了,后来发现i出现了两遍。。
因为m<10^9,所以用素数筛筛32000以内的数,开一个4000的数组存储就行。然后再从n开始用素数筛,总之效率还行。
代码如下:
//0.01s 3.2M
#include<cstdio>
#include<cstring>
#include<cmath>
int n,i,j,t,m,k,tot;
int a[100005],b[4000];
int prime[40000];
int shai(int s){
int i,j;
memset(prime,0,sizeof(prime));
prime[1]=2;
i=2;
while(i<s){
prime[i]=1;
for(j=i;j<=s/i;j++){
prime[j*i]=2;
}
while(prime[i])i++;
}
tot=0;
for (i=1;i<=s;i++){
if (prime[i]==1)b[++tot]=i;
}
return 1;
}
int main(){
shai(32000);
for (scanf("%d",&t);t;t--){
scanf("%d%d",&n,&m);
k=m;
k=int(sqrt(double(k)));
memset(a,0,sizeof(a));
for (j=1;j<=tot;j++){
int less = n / b[j];
if (less<b[j])less=b[j];
for (i=less;i<=m/b[j];i++){
if (i*b[j]<n)continue;
a[i*b[j]-n]=1;
}
if (b[j]*b[j]>m)break;
}
for (i=0;i<=m-n;i++){
if (a[i]==0&&i+n!=1)printf("%d\n",i+n);
}
if (t)printf("\n");
}
return 0;
}
SPOJ Problem 2: Prime Generator
标签:
原文地址:http://www.cnblogs.com/moris/p/4292178.html