| 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