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 |
Re:有没有大牛能帮我看看为什么我的程序会WA?In Reply To:Re:有没有大牛能帮我看看为什么我的程序会WA? Posted by:swordfeng at 2013-06-14 20:57:02 再贴CODE var M,x1,x2,x0,ran,tem,d,k,t,p,q,c,e,n:int64; i,j:longint; procedure init; begin randomize; readln(c,e,n); end; function ExGcd(a,b:int64; var x,y:int64):longint; var r:int64; begin if b = 0 then begin x:=1; y:=0; exit(a); end; r:=ExGcd(b,a mod b,x,y); tem:=x; x:=y; y:=tem-(a div b)*y; exit(r); end; function Mult(x,y:int64):int64; var s:int64; begin s:=0; while y > 0 do begin if y and 1 = 1 then begin s:=s+x; if s > n then s:=s-n; end; x:=x shl 1; if x > n then x:=x-n; y:=y shr 1; end; exit(s); end; function Calc(x:int64):int64; var s,a,b:int64; i:longint; begin s:=Mult(x,x); s:=s+1; if s >= n then s:=s-n; exit(s); end; function gcd(a,b:int64):int64; begin if b = 0 then exit(a); exit( gcd(b,a mod b) ); end; procedure Analyse_N(n:int64); var i,k:longint; quit:boolean; begin if N mod 2 = 0 then begin P:=2; Q:=N div P; exit; end; quit:=false; while not quit do begin x0:=random(n-1)+1; x1:=Calc(x0); i:=1; k:=2; while x1 <> x0 do begin inc(i); if i = k then begin k:=k shl 1; x0:=x1; end; x1:=Calc(x1); if gcd(abs(x1-x0),n) > 1 then begin p:=gcd(abs(x1-x0),n); if p <> n then begin q:=n div p; exit; end else break; end; end; end; end; function Count(C,D,N:int64):int64; var i:longint; sum:int64; begin sum:=1; while D > 0 do begin if D and 1 = 1 then sum:=Mult(sum,C); C:=Mult(C,C); D:=D shr 1; end; exit(sum); end; procedure work; begin Analyse_N(n); T:=(P-1)*(Q-1); ExGcd(E,T,D,K); d:=(d mod t + t) mod t; M:=Count(C,D,N); writeln(M); end; begin while not eof do begin init; work; end; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator