1 条题解

  • 0
    @ 2025-4-14 18:45:31

    C :

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    	long a, b, c, d;
    	int k;
    	while (scanf("%ld %ld %ld %ld", &a, &b, &c, &k), a || b || c || k)
    	{
    		d = b - a;
    		if (d < 0)
    		{
    			d += powf(2, k);
    		}
    		if (d %c)
    		{
    			printf("FOREVER\n");
    		}
    		else
    		{
    			printf("%d\n", d/c);
    		}
    	}
    	return 0;
    }
    

    C++ :

    #include <iostream>
    using namespace std;
    typedef long long int64;
    
    int64 mod(int64 a, int64 b){
        if (a < 0) return a % b + b;
        return a % b;
    }
    
    int64 ex_gcd(int64 a, int64 b, int64 &x, int64 &y){
        if (b == 0){
            x = 1; y = 0; return a;
        }else{
            int64 d = ex_gcd(b, a % b, x, y);
            int64 temp = x;
            x = y; y = (temp - a / b * y);
            return d;
        }
    }
    
    int main(){
        int64 a, b, c, k, A, B, C, x, y;
        while(cin>>a>>b>>c>>k, a || b || c || k){
            A = c; B = ((int64)1) << k; C = (b - a + B) % B;
            if (c == 0){
                if (C == 0) cout<<"0"<<endl;
                else cout<<"FOREVER"<<endl;
                continue;
            }
            int64 d = ex_gcd(A, B, x, y);
            if (C % d) cout<<"FOREVER"<<endl;
            else cout<<mod(C * x / d, B / d)<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    3572
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者