(C)
#包括<stdio.h>
#包括<stdlib.h>
#定义顶部(1全部<<32)
typedef unsigned long long U64;
int pp_compare(常量无效*p1,常量无效*p2){
如果(*(U64*)p1==*(U64*)p2),则返回0;
如果(*(U64*)p1<*(U64*)p2)返回-1;
返回1;
}
整型main(){
U64 i,j,k,p,pp=1,pfp,*素数,*pwFlat;
素数=(U64*)malloc(203280221*8)//A007053号(32)
pwFlat=(U64*)malloc(TOP/2);
char*c=(char*)pwFlat;
memset(c,0,TOP/2);
素数[0]=2;
对于(i=3;i<TOP;i+=2){
如果(c[i>>1]==0){
素数[pp++]=i;
对于(j=i*i;j<TOP;j+=i*2)c[j>>1]=1;
}
如果((i&(i-2))==1)打印f(“.”);
}
对于(pfp=i=0;i<pp;++i)
对于(j=素数[i]*素数[i];;){
pwFlat[pfp++]=j;
双k=((双)j)*(双)素数[i];
如果(k>=(双)TOP)*(双)TO)断开;
j*=素数[i];
}
自由(质数);
qsort(pwFlat,pfp,8,pp_compare);
对于(i=j=k=0;i<pfp;++i){
p=pwFlat[i];
而(j<p-1)++k,j+=k;
如果(j==p-1)printf(“%lu,”,j);
}
自由(pwFlat);
返回0;
}
|