Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
你这个能通过POJ的Compiler么?In Reply To:Why TLE? Posted by:iamsleepy at 2005-06-27 13:00:24 > #include <iostream> > #include <cstdlib> > #include <ctime> > > > using namespace std; > > long long c,e,n,d; > > const long double capasize=1000000000; > > long double myabs(long double a) > { > if (a<0) return -a; > else return a; > } > > long long egcd(long long a,long long b,long long *x,long long *y) > { > if(b==0) > { > *x=1; > *y=0; > return a; > } > else > { > long long t,temp=egcd(b,a%b,x,y); > t=*x; > *x=*y; > *y=t-(a/b)*(*y); > return temp; > } > } > > > long long linemod(long long a,long long b,long long n) > { > long long x,y; > long long d=egcd(a,n,&x,&y); > if(b%d!=0) cerr<<"ERROR!!\n"; > long long e=x*(b/d)%n; > while(e<0) > { > e+=n/d; > e%=n; > } > return e; > } > > > long double mymod(long double x) > { > long double temp=x/n,v=x/n; > while(temp>capasize) temp=temp/10; > long double t=long(temp); > int a; > while(v-temp>1) > { > t*=10; > temp*=10; > a=long(temp-t); > t+=a; > } > return x-t*n; > } > > long long work(long double c,long long d) > { > if(d==1) return c; > else > { > if(d%2) > { > long double x=work(c,d/2); > x=mymod(x*x); > x*=c; > return mymod(x); > } > else > { > long double x=work(c,d/2); > return mymod(x*x); > } > } > } > > long long gcd(long long a,long long b) > { > if(b==0) return a; > else return gcd(b,a%b); > } > > long long pollard() > { > srand((unsigned)time( NULL )); > long long i=1,k=2; > long double x0=rand(); > x0=mymod(myabs(x0*x0-rand())); > long double y=x0,x1,d,b; > while(true) > { > i++; > x1 = mymod(myabs(x0*x0-rand())); > d = gcd(myabs(y-x1),n); > if((d>1)&&(d<n)) > return d; > if(i==k) > { > y = x0 = x1; k = 2*k; > } > else > x0 = x1; > } > } > > > int main(int argc, char *argv[]) > { > > long double t; > long long f; > while(cin >>c) > { > cin >>e>>n; > f=pollard(); > t=(f-1)*(n/f-1); > d=linemod(e,1,t); > cout <<work(c,d)<<endl; > } > return 0; > } > > Pollard那里怎么写会比较快一点啊?用long long应该会超的八 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator