#define abs(x) ((x)>0?(x):-(x))
#define HALFLIMIT 6325
#define LIMIT (HALFLIMIT*HALFLIMIT)
#define SUMBOUND (LIMIT*25)
//The limitation is 40000000*25
#ifdef WIN32
typedef __int64 longlong;
#else
typedef long long longlong;
#endif
#define MAXNUMS 51000000
int not_prime[LIMIT];
int pcount;
#define primelist not_prime
int data[MAXNUMS][4];
int dcount;
int cmpdata(const void *p, const void *q){
const int *pi=(const int *)p;
const int *qi=(const int *)q;
int i;
for(i=0;i<4;i++){
if(pi[i]<qi[i])return -1;
if(pi[i]>qi[i])return 1;
}
return 0;
}
上面分解平方数的代码有个BUG,我说怎么这么慢呢
int rm1(int p){
int i;
int t=(p-1)/4;
for(i=2;i<p;i++){
int u=powmod(i,t,p);
>> if((u*u+1)%p==0)return u;
改成:
if(((longlong)u*u+1)%p==0)return u;
}
}
#define abs(x) ((x)>0?(x):-(x))
#define HALFLIMIT 6325
#define LIMIT (HALFLIMIT*HALFLIMIT)
#define SUMBOUND (LIMIT*25)
//The limitation is 40000000*25
#ifdef WIN32
typedef __int64 longlong;
#else
typedef long long longlong;
#endif
#define MAXNUMS 73000000
int not_prime[LIMIT];
int pcount;
#define primelist not_prime
int data[MAXNUMS][4];
int dcount;
int cmpdata(const void *p, const void *q){
const int *pi=(const int *)p;
const int *qi=(const int *)q;
int i;
for(i=0;i<4;i++){
if(pi[i]<qi[i])return -1;
if(pi[i]>qi[i])return 1;
}
return 0;
}
int cmpsd(const void *p, const void *q){
const int *pi=(const int *)p;
const int *qi=(const int *)q;
int i;
for(i=0;i<3;i++){
if(pi[i]<qi[i])return -1;
if(pi[i]>qi[i])return 1;
}
return 0;
}
#define abs(x) ((x)>0?(x):-(x))
#define HALFLIMIT 6325
#define LIMIT (HALFLIMIT*HALFLIMIT)
#define SUMBOUND (LIMIT*25)
//The limitation is 40000000*25
#ifdef WIN32
typedef __int64 longlong;
#else
typedef long long longlong;
#endif
#define MAXNUMS 73000000
int not_prime[LIMIT];
int pcount;
#define primelist not_prime
int data[MAXNUMS][4];
int dcount;
int cmpdata(const void *p, const void *q){
const int *pi=(const int *)p;
const int *qi=(const int *)q;
int i;
for(i=0;i<4;i++){
if(pi[i]<qi[i])return -1;
if(pi[i]>qi[i])return 1;
}
return 0;
}
int cmpsd(const void *p, const void *q){
const int *pi=(const int *)p;
const int *qi=(const int *)q;
int i;
for(i=0;i<3;i++){
if(pi[i]<qi[i])return -1;
if(pi[i]>qi[i])return 1;
}
return 0;
}