1 条题解

  • 0
    @ 2024-9-3 22:03:14

    C :

    #include <stdio.h>
    #define MOD 200907
    
    long long g(long long q, long long k) {
        long long sum = 1, a[1000], i = 0;
        while (k) {
            if (k % 2 != 0)
                a[i++] = 1;
            else
                a[i++] = 0;
            k /= 2;
        }
        i--;
        for (i; i >= 0; i--) {
            sum = (sum * sum) % MOD;
            if (a[i])
                sum = (sum * q) % MOD;
        }
        return sum % MOD;
    }
    
    
    int main() {
        long long a, b, c, k, t, d, q;
        int n;
        scanf("%d", &n);
        while (n--) {
            scanf("%lld%lld%lld%lld", &a, &b, &c, &k);
            if (b - a == c - b) {
                d = b - a;
                t = ((((k - 1) % MOD) * (d % MOD)) % MOD + a % MOD) % MOD;
                printf("%lld\n", t);
            } else {
                q = b / a;
                printf("%lld\n", (a % MOD * g(q, k - 1)) % MOD);
            }
        }
        return 0;
    }
    

    C++ :

    #include <stdio.h>
    #define MOD 200907
    
    long long g(long long q, long long k) {
    	long long sum = 1, a[1000], i = 0;
    	while (k) {
    		if (k % 2 != 0)
    			a[i++] = 1;
    		else
    			a[i++] = 0;
    		k /= 2;
    	}
    	i--;
    	for (i; i >= 0; i--) {
    		sum = (sum * sum) % MOD;
    		if (a[i])
    			sum = (sum * q) % MOD;
    	}
    	return sum % MOD;
    }
    int main() {
    	long long a, b, c, k, t, d, q;
    	int n;
    	scanf("%d", &n);
    	while (n--) {
    		scanf("%lld%lld%lld%lld", &a, &b, &c, &k);
    		if (b - a == c - b) {
    			d = b - a;
    			t = ((((k - 1) % MOD) * (d % MOD)) % MOD + a % MOD) % MOD;
    			printf("%lld\n", t);
    		} else {
    			q = b / a;
    			printf("%lld\n", (a % MOD * g(q, k - 1)) % MOD);
    		}
    	}
    	return 0;
    }
    
    • 1