Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 15974 | Accepted: 4107 |
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
Source
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; __int64 x,y; int main() { //freopen("data.in","r",stdin); __int64 f(__int64 a,__int64 b); __int64 a,b,c,k; while(scanf("%I64d %I64d %I64d %I64d",&a,&b,&c,&k)!=EOF) { if(a==0&&b==0&&c==0&&k==0) { break; } __int64 mod = 1; for(int i=1;i<=k;i++) { mod = mod*2; } __int64 A = c; __int64 B = mod; __int64 N = ((b-a)%B+B)%B; __int64 d = f(A,B); if(N%d!=0) { printf("FOREVER\n"); continue; } x = x*(N/d); x = (x%B+B)%B; if((-x*d)%B==0) { x = 0; }else { __int64 k; k = (-x*d)/B; x = x + k*B/d; } printf("%I64d\n",x); } return 0; } __int64 f(__int64 a,__int64 b) { if(b==0) { x = 1; y = 0; return a; } __int64 d = f(b,a%b); __int64 temp = x; x = y; y = temp-a/b*y; return d; }
原文:http://blog.csdn.net/yongxingao/article/details/18445069