标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 23616 | Accepted: 6517 |
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<string> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; #define ll long long #define esp 1e-13 const int N=1e4+10,M=1e6+50000,inf=1e9+10,mod=1000000007; void extend_Euclid(ll a, ll b, ll &x, ll &y) { if(b == 0) { x = 1; y = 0; return; } extend_Euclid(b, a % b, x, y); ll tmp = x; x = y; y = tmp - (a / b) * y; } ll gcd(ll a,ll b) { if(b==0) return a; return gcd(b,a%b); } ll pow1(ll x) { ll sum=1; for(ll i=0;i<x;i++) sum*=2; return sum; } int main() { ll x,y,i,z,t; while(~scanf("%lld%lld%lld%lld",&x,&y,&i,&t)) { if(x==0&&y==0&&i==0&&t==0) break; ll m=pow1(t); ll c=((y-x)%m+m)%m; ll j,k; if(c%gcd(m,i)==0) { extend_Euclid(i,m,j,k); ll ans=j*(c/gcd(m,i)); m=m/gcd(m,i); printf("%lld\n",(ans%m+m)%m); } else printf("FOREVER\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/jhz033/p/5766058.html