// returns a non-trivial factor q of ZZ_p::modulus(), or 1 otherwise void ECM_stage_one(ZZ& q, EC_p& Q, PrimeSeq& seq, long bound) { long sbound = (long)sqrt((double)bound); seq.reset(0); long p = seq.next(); for (; p<=sbound; p=seq.next()) { long pp,t=p; do { pp=t; t*=p; } while (t>pp && t<=bound); // we might overflow t here mul(Q,Q,pp); } for (; p<=bound; p=seq.next()) mul(Q,Q,p); if (!IsZero(Q)) GCD(q,ZZ_p::modulus(),rep(Q.Z)); else set(q); }
/* Find a primitive root modulo N */ long primroot(long N,long phiN) { long g=2,p; PrimeSeq s; bool flag=false; while (flag==false) { flag=true; s.reset(1); do { p=s.next(); if ((phiN%p)==0) { if (PowerMod(g,phiN/p,N)==1) { flag=false; } } } while (p<phiN && flag); if (flag==false) { g++; } } return g; }
int main(){ long n = 183783600; long b = 18; long rootn=SqrRoot(n); long p; PrimeSeq s; vector<long> values; vector<long> logV; for(long m=n+1;m<1.66*n;m++){ values.push_back(m); logV.push_back(log(m)); } s.reset(b); p=s.next(); int temp=log(p); while(p<rootn){ for(int i=0;i<logV.size();i++){ long t=pow(10,(logV[i]/temp)); if(ceil(t)-t<0.05 || t-floor(t)<0.05){ // cout<<"here at "<<i<<endl; values[i]=0; break; } } p=s.next(); } int y=0; cout<<"arr=["; for(int i=0;i<values.size();++i){ if(values[i]!=0)cout<<values[i]<<","; // if(temp[i]!=0)cout<<temp[i]<<endl; } cout<<"0]"<<endl; cout<<"ND = numdiv("<<n<<"); nd = 0; i = 1; while( nd<=ND, nd = numdiv(arr[i]); i = i+1); print(arr[i-1])"<<endl; return 0; }