素数
Primes http://poj.org/problem?id=3978
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define mt(a,b) memset(a,b,sizeof(a)) 5 using namespace std; 6 const int M=100010; 7 int pri[M],mark[M],pricnt;//mark[i]存i的最小因子,素数时mark[i]==i 8 void sieve_primes(){//筛素数 9 pricnt=0; 10 mt(mark,0); 11 mark[0]=mark[1]=1; 12 for(int i=2;i<M;i++){ 13 if(!mark[i]) pri[pricnt++]=mark[i]=i; 14 for(int j=0;pri[j]*i<M;j++){ 15 mark[i*pri[j]]=pri[j]; 16 if(!(i%pri[j])) break; 17 } 18 } 19 } 20 int main(){ 21 sieve_primes(); 22 int x,y; 23 while(~scanf("%d%d",&x,&y)){ 24 if(x==-1&&y==-1) break; 25 int ans=0; 26 for(int i=max(x,2);i<=y;i++){ 27 if(mark[i]==i) ans++; 28 } 29 printf("%d\n",ans); 30 } 31 return 0; 32 }
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define mt(a,b) memset(a,b,sizeof(a)) 5 using namespace std; 6 const int M=100010; 7 int pri[M],mark[M],pricnt;//mark[i]存i的最小因子,素数时mark[i]==i 8 void sieve_primes(){//筛素数 9 pricnt=0; 10 mt(mark,0); 11 mark[0]=mark[1]=1; 12 for(int i=2;i<M;i++){ 13 if(!mark[i]) pri[pricnt++]=mark[i]=i; 14 for(int j=0;pri[j]*i<M;j++){ 15 mark[i*pri[j]]=pri[j]; 16 if(!(i%pri[j])) break; 17 } 18 } 19 } 20 int main(){ 21 sieve_primes(); 22 int x,y,px,py; 23 while(~scanf("%d%d",&x,&y)){ 24 if(x==-1&&y==-1) break; 25 px=lower_bound(pri,pri+pricnt,x)-pri; 26 py=lower_bound(pri,pri+pricnt,y)-pri; 27 if(pri[py]==y) py++; 28 printf("%d\n",py-px); 29 } 30 return 0; 31 }
Prime Gap http://poj.org/problem?id=3518
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define mt(a,b) memset(a,b,sizeof(a)) 5 using namespace std; 6 const int M=1300000; 7 int pri[M],mark[M],pricnt;//mark[i]存i的最小因子,素数时mark[i]==i 8 void sieve_primes(){//筛素数 9 pricnt=0; 10 mt(mark,0); 11 mark[0]=mark[1]=1; 12 for(int i=2;i<M;i++){ 13 if(!mark[i]) pri[pricnt++]=mark[i]=i; 14 for(int j=0;pri[j]*i<M;j++){ 15 mark[i*pri[j]]=pri[j]; 16 if(!(i%pri[j])) break; 17 } 18 } 19 } 20 int main(){ 21 sieve_primes(); 22 int n; 23 while(~scanf("%d",&n),n){ 24 int L=lower_bound(pri,pri+pricnt,n)-pri; 25 if(pri[L]==n){ 26 puts("0"); 27 } 28 else{ 29 printf("%d\n",pri[L]-pri[L-1]); 30 } 31 } 32 return 0; 33 }
Prime Path http://poj.org/problem?id=3126
1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define mt(a,b) memset(a,b,sizeof(a)) 5 using namespace std; 6 const int M=10010; 7 int pri[M],mark[M],pricnt;//mark[i]存i的最小因子,素数时mark[i]==i 8 void sieve_primes(){//筛素数 9 pricnt=0; 10 mt(mark,0); 11 mark[0]=mark[1]=1; 12 for(int i=2;i<M;i++){ 13 if(!mark[i]) pri[pricnt++]=mark[i]=i; 14 for(int j=0;pri[j]*i<M;j++){ 15 mark[i*pri[j]]=pri[j]; 16 if(!(i%pri[j])) break; 17 } 18 } 19 } 20 int n,s,e; 21 bool vis[M]; 22 char tmp[8]; 23 struct G{ 24 int val,step; 25 }now,pre; 26 queue<G> q; 27 void bfs(){ 28 mt(vis,0); 29 vis[s]=true; 30 now.val=s; 31 now.step=0; 32 while(!q.empty()) q.pop(); 33 q.push(now); 34 while(!q.empty()){ 35 pre=q.front(); 36 q.pop(); 37 if(pre.val==e){ 38 printf("%d\n",pre.step); 39 return ; 40 } 41 for(int i=0;i<4;i++){ 42 for(int j=0;j<10;j++){ 43 if(i==0&&j==0) continue; 44 sprintf(tmp,"%d",pre.val); 45 tmp[i]=j+'0'; 46 sscanf(tmp,"%d",&now.val); 47 if(!vis[now.val]&&mark[now.val]==now.val){ 48 vis[now.val]=true; 49 now.step=pre.step+1; 50 q.push(now); 51 } 52 } 53 } 54 } 55 } 56 int main(){ 57 sieve_primes(); 58 while(~scanf("%d",&n)){ 59 while(n--){ 60 scanf("%d%d",&s,&e); 61 bfs(); 62 } 63 } 64 return 0; 65 }
Sum of Consecutive Prime Numbers http://poj.org/problem?id=2739
1 #include<cstdio> 2 #include<cstring> 3 #define mt(a,b) memset(a,b,sizeof(a)) 4 const int M=10010; 5 int pri[M],mark[M],pricnt;//mark[i]存i的最小因子,素数时mark[i]==i 6 void sieve_primes(){//筛素数 7 pricnt=0; 8 mt(mark,0); 9 mark[0]=mark[1]=1; 10 for(int i=2;i<M;i++){ 11 if(!mark[i]) pri[pricnt++]=mark[i]=i; 12 for(int j=0;pri[j]*i<M;j++){ 13 mark[i*pri[j]]=pri[j]; 14 if(!(i%pri[j])) break; 15 } 16 } 17 } 18 int main(){ 19 sieve_primes(); 20 int n; 21 while(~scanf("%d",&n),n){ 22 int ans=0; 23 for(int i=0;i<pricnt;i++){ 24 int sum=0; 25 for(int j=i;;j++){ 26 sum+=pri[j]; 27 if(sum>=n) break; 28 } 29 if(sum==n) ans++; 30 } 31 printf("%d\n",ans); 32 } 33 return 0; 34 }
end