第1个回答 2012-11-30
较快的Wilson改进判定法:
#include<stdio.h>
#include<math.h>
void main()
{long i,k=1,n,s,r,p,T=1000000;printf("2,");
for(n=3;n<=T;n=n+2){r=1;s=sqrt(n);p=n/2;
for(i=3;i<=s;i=i+2){r=(r*i)%n;if(r>p){r=n-r;}}
if(r>1)goto a;if(r==1){k++;printf("%ld,",n);}goto zhuan;
a:s=n;an:s=s%r;if(s>1){i=s;s=r;r=i;goto an;};
if(s==1){printf("%ld,",n);k++;}
zhuan:;}
printf("k=%ld,\n",k);getch();}
两个素数之间间隔:
d<=(lnpn)^2