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;
}
浙公网安备 33010602011771号