poj 2115
扩展欧几里得。
代码:
#include<iostream> #include<fstream> using namespace std; long long n,x,y; long long gcd(long long s,long long t){ if(t==0) { x=1;y=0; return s; } long long i=gcd(t,s%t); long long tmp=x; x=y; y=tmp-s/t*y; return i; } void read(){ // ifstream cin("in.txt"); int i,j,k; long long a,b,c,d,e; while(cin>>a>>b>>c>>d){ if(a==0&&b==0&&c==0&&d==0) return; n=(long long)1<<d; e=gcd(c,n); if((b-a)%e) cout<<"FOREVER"<<endl; else { a=x*(b-a)/e%n+n; cout<<a%(n/e)<<endl; } } } int main(){ read(); return 0; }