//***************************************************// // 数学の部屋 *// // 2つの素数の差 検査ソフト  *// // Copyrighted by Y/M.Ojisan 2003/7/23 *// //***************************************************// #include #include #include #include #include #include // 検査最大 2N=剪l=4E13 // P1素数 差代値 8196 // エラトステネスの篩用素数マップ 16Mまで ie 256T // 素数マップビット対応 INTベース 3は 0番地 0bit // Pは [(P-3)/64]番地 { (P-3)/2 mod 32 }bit // LAST P=2^24+1 2^17-1番地  31bit int[256k] FILE *fp; #define SIZEofINT 32 #define Pstart 3 #define PEend ((1<<24)+1) #define GUend ((_int64)400000000000000) #define ERATOS_AREA ((PEend-1)/2/SIZEofINT) #define CHECKSIZE (1600000) #define MASKSIZE ((8196)/16) unsigned int PEmap[ERATOS_AREA]; unsigned int PImap[CHECKSIZE]; unsigned int PMmap[SIZEofINT][MASKSIZE]; unsigned int PVmap[CHECKSIZE]; unsigned int bitmap[SIZEofINT],ibitmap[SIZEofINT]; unsigned int PEmask[SIZEofINT][SIZEofINT]; int PE_k[SIZEofINT][SIZEofINT]; unsigned int FF=-1; int reverse(int X) { int Y=0,i; for(i=0;i>=1;} return Y; } void init() { int i,j,p,bit,pp; int k,dj,dbit; //bitmap for(i=0;i=SIZEofINT){bit-=SIZEofINT;i++;} } } } } } void check(__int64 Qs,int AREA, unsigned int Page[]) { int i,bit,T,q,qmax,Er=0; _int64 p; for(i=0;i=SIZEofINT) { bit=X % SIZEofINT; k=PE_k[p][bit]; for(i=0;i=B){b-=SIZEofINT;a++;} } } } } _int64 solutions(_int64 Qtop,int PageSize,int MaskSize); void main() { time_t T1,T2;double duration; int I,J; _int64 C=3; T1=clock(); { init(); for(I=0;I>(SIZEofINT-J-1); if(I>=1) PMmap[J][I]|=PMmap[SIZEofINT-1][I-1]<<(J+1); } } T2=clock(); duration = (double)(T2-T1) / CLOCKS_PER_SEC; cprintf("%f(sec) Input Pstart>\n",duration); scanf("%I64d",&C) ;if((C%2)==0) C=C+1;if(C<3) C=3; fp=fopen("out.txt","a"); while(Cimin;i--) PVmap[i]|=*(pm-i); } while(PVmap[pos1+1]==FF) pos1++; if(pos2-pos1>dpmax) dpmax=pos2-pos1; } DELTAend=DELTAtop-2+(2*SIZEofINT)*pos1; if(PageSize-MaskSize<=pos1) { cprintf("GOOD OK=%I64d -- %I64d %d\n",DELTAtop,DELTAend,64*dpmax); fprintf(fp,"GOOD OK=,%I64d,%I64d,%d",DELTAtop,DELTAend,64*dpmax); } else { cprintf("BAD OK=%I64d -- %I64d %d\n",DELTAtop,DELTAend,64*dpmax); fprintf(fp,"BAD OK=,%I64d,%I64d,%d",DELTAtop,DELTAend,64*dpmax); } return (DELTAend+5); }