PKU 2115 C Looooops(拓展欧几里德)


  • 原题链接:Here!

  • 题意:
    Description:
    对于循环语句:for(variable=A;variable!=B;variable+=C)statement;
    已知所有的数均要mod 2^k(即0<=x<2^k),给出A,B,C和k的值,计算并输出statement执行的次数,如果为无限次,那么直接输出“FOREVER”。
    Input:
    输入数据有多组,每组数据占一行,有四个整数A,B,C,k(0<=A,B,C<2^k),如上所述,输入以0 0 0 0终止。Output
    对于每组输入数据,输出“statement”执行的次数,如果为无限次,那么直接输出“FOREVER”。Description

    根据题意可以得出 A+C*t ≡ B( mod 1< 下图是测试1<PKU 2115 C Looooops(拓展欧几里德)_第1张图片

  • 代码:
    #include
    using namespace std;
    
    typedef long long LL;
    LL exgcd(LL a,LL b,LL &x,LL &y){
    	if(b==0){
    		x=1; y=0; return a;
    	}
    	LL d = exgcd(b,a%b,x,y);
    	LL tmp = x;
    	x = y;
    	y = tmp - a/b*y;
    	return d;
    }
    int main(){
    	LL a,b,c,k,x,y;
    	while(cin>>a>>b>>c>>k && (a+b+c+k)){
    		LL m = (LL)1<


你可能感兴趣的:(۩۩.._ACM)