标签:value either rip any compiler pst typedef mod ros
Description
for (variable = A; variable != B; variable += C)
statement;
Input
Output
Sample Input
3 3 2 16 3 7 2 16 7 3 2 16 3 4 2 16 0 0 0 0
Sample Output
0 2 32766 FOREVER
--------------------------------------------------------------------------
题意:在一个k位的机器里(大于2^k就回到0),求循环何时终止。
分析:似乎是裸的扩欧。方程:c*x + 2^k*y = b-a 。
1 #include <cstdio> 2 typedef long long LL; 3 LL exgcd(LL a,LL b,LL &x,LL &y) 4 { 5 int d; 6 if(b==0) 7 { 8 x=1;y=0;return a; 9 } 10 else 11 { 12 d=exgcd(b,a%b,y,x);y-=x*(a/b); 13 } 14 return d; 15 } 16 int main() 17 { 18 LL a,b,c,k; 19 while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)&&(a||b||c||k)) 20 { 21 22 LL i=b-a,x=0,y=0,d=0,p=1LL<<k;//不加LL会爆 23 //方程:c*x + 2^k*y = b-a 24 d=exgcd(c,p,x,y); 25 if(i%d!=0) 26 { 27 printf("FOREVER\n"); 28 continue; 29 } 30 p/=d; 31 x%=p; 32 x*=(i/d)%p;//把倍数乘上 33 x=(x%p+p)%p; 34 printf("%lld\n",x); 35 } 36 return 0; 37 }
标签:value either rip any compiler pst typedef mod ros
原文地址:http://www.cnblogs.com/noblex/p/7533493.html