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;
}

posted on 2011-04-05 21:50  宇宙吾心  阅读(387)  评论(0)    收藏  举报

导航