首页 > 其他 > 详细

poj2115 C Looooops 空间 2012-01-14

时间:2016-03-02 21:59:43      阅读:246      评论:0      收藏:0      [点我收藏+]

http://poj.org/problem?id=2115

_______________________________________

求 a+cx=b (mod 2^k)

用exgcd求线性模方程!

_______________________________________

 1 Program Stone;
 2 var i:longint;
 3     a,b,c,k,x,y,g,ans:int64;
 4     sh:array[0..50]of int64;
 5 
 6  Function exgcd(a,b:int64;var x,y:int64):int64;
 7  var i:int64;
 8   begin
 9      if b=0 then begin x:=1;y:=0;exit(a);end;
10      exgcd:=exgcd(b,a mod b,x,y);
11      i:=x;
12      x:=y;
13      y:=i-(a div b)*y;
14   end;
15 begin
16   assign(input,input.in);reset(input);
17   sh[0]:=1;
18   for i:=1 to 32 do sh[i]:=sh[i-1]*2;
19   readln(a,b,c,k);
20   while (a<>0)or(b<>0)or(c<>0)or(k<>0) do
21    begin
22      g:=exgcd(c,sh[k],x,y);
23      if (b-a) mod g<>0 then writeln(FOREVER)
24                        else begin
25                               ans:=x*(b-a) div g mod sh[k]+sh[k];
26                               writeln(ans mod (sh[k] div g));
27                             end;
28      readln(a,b,c,k);
29    end;
30 end.
31 
32  
33 
34  

 

poj2115 C Looooops 空间 2012-01-14

原文:http://www.cnblogs.com/yesphet/p/5236466.html

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