首页 > 其他 > 详细

exBSGS模板

时间:2017-01-29 15:23:45      阅读:256      评论:0      收藏:0      [点我收藏+]

题目bzoj2480,bzoj1467,贴个板子上来吧

 1 program j01;
 2 const mo=1000007;
 3 var head:array[0..mo]of int64;
 4     hash,next,data:array[0..mo]of int64;
 5     a,b,p,tt:int64;
 6  
 7 function gcd(a,b:int64):int64;
 8 begin
 9   if b=0 then exit(a) else exit(gcd(b,a mod b));
10 end;
11  
12 function pow(a,i,mm:int64):int64;
13 var y:int64;
14 begin
15   if i=0 then exit(1);
16   y:=pow(a,i div 2,mm) mod mm;
17   y:=y*y mod mm;
18   if i mod 2=1 then y:=y*a mod mm;
19   exit(y);
20 end;
21   
22 procedure push(i,w:int64);
23 var x:int64;
24 begin
25   x:=i mod mo;
26   inc(tt);
27   hash[tt]:=i;data[tt]:=w;
28   next[tt]:=head[x];
29   head[x]:=tt;
30 end;
31  
32 function find(i:int64):int64;
33 var j:int64;
34 begin
35   j:=head[i mod mo];
36   while j>0 do
37   begin
38     if hash[j]=i then exit(data[j]);
39     j:=next[j];
40   end;
41   exit(-1);
42 end;
43   
44 procedure solve;
45 var i:longint;
46     n,now,tmp,x,m,d,cnt,t:int64;
47 begin
48   a:=a mod p;b:=b mod p;
49   if b=1 then
50   begin
51     writeln(0);exit;
52   end;
53   cnt:=0;t:=1;
54   while true do
55   begin
56     d:=gcd(a,p);
57     if d=1 then break;
58     if b=t then
59     begin
60       writeln(cnt);exit;
61     end;
62     if not(b mod d=0) then
63     begin
64        writeln(No Solution);exit;
65     end;
66     p:=p div d;b:=b div d;t:=(t*a div d)mod p;
67     inc(cnt);
68   end;
69   tt:=0;fillchar(head,sizeof(head),0);
70   m:=trunc(sqrt(p))+1;b:=b mod p;
71   now:=b;push(now,0);
72   for i:=1 to m do
73   begin
74     now:=now*a mod p;
75     push(now,i);
76   end;
77   tmp:=pow(a,m,p);
78   now:=t;
79   for i:=1 to m do
80   begin
81     now:=now*tmp mod p;
82     x:=find(now);
83     if x>-1 then
84     begin
85       writeln(i*m-x+cnt);
86       exit;
87     end;
88   end;
89   writeln(No Solution);
90 end;
91  
92 begin
93   while true do
94   begin
95     readln(a,p,b);
96     if (a=0)and(b=0)and(p=0) then break;
97     solve;
98   end;
99 end.

 

exBSGS模板

原文:http://www.cnblogs.com/oldjang/p/6357497.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!