3 条题解

  • 2
    @ 2023-6-30 9:33:33
    #include <iostream>
    using namespace std;
    // 求a的b次方对mod取模的值
    long long fastPower(long long a, long long b, long long mod) {
        long long res = 1;
        a = a % mod;
        while (b > 0) {
            if (b % 2 == 1) {
                res = (res * a) % mod;
            }
            a = (a * a) % mod;
            b /= 2;
        }
        return res;
    }
    // 求序列第k项的值
    long long getKthTerm(long long a, long long b, long long c, long long k) {
        if (b - a == c - b) { // 等差数列
            long long d = b - a;
            return (a + (k - 1) * d) % 200907;
        } else { // 等比数列
            long long q = b / a;
            return (a * fastPower(q, k - 1, 200907)) % 200907;
        }
    }
    int main() {
        int T;
        cin >> T;
        while (T--) {
            long long a, b, c, k;
            cin >> a >> b >> c >> k;
            long long result = getKthTerm(a, b, c, k);
            cout << result << endl;
        }
        return 0;
    }
    

    这个代码中,我们首先定义了一个快速幂算法 fastPower,用于求解a的b次方对mod取模的值。然后定义了一个函数 getKthTerm,用于求序列的第k项的值。在 getKthTerm函数中,首先判断序列的类型,如果是等差数列,则计算第k项的值为a + (k - 1) * d;如果是等比数列,则计算第k项的值为a * (q^(k - 1))。最后在主函数中,根据输入的测试数据,调用 getKthTerm函数计算第k项的值,并输出结果。

    分享

    • 1
      @ 2026-6-12 17:39:02
      #include<bits/stdc++.h>
      using namespace std;
      long long fp(long long a, long long b, long long m){
      	long long res=1;
      	a=a%m;
      	while(b>0){
      		if(b%2==1){
      			res=(res*a)%m;
      		}
      		a=(a*a)%m;
      		b/=2;
      	}
      	return res;
      }
      long long gt(long long a,long long b,long long c,long long k){
      	if(b-a==c-b){
      		long long d=b-a;
      		return (a+(k-1)*d)%200907;
      	}else{
      		long long q=b/a;
      		return (a*fp(q,k-1,200907))%200907;
      	}
      }
      int main(){
      	int t;
      	cin >> t;
      	while(t--){
      		long long a,b,c,k;
      		cin>>a>>b>>c>>k;
      		long long rst=gt(a,b,c,k);
      		cout<<rst<<endl;
      	}
      	return 0;
      }
      
      • 1
        @ 2023-1-25 13:38:55
        #include <iostream>
        using namespace std;
        const long long M=200907;
        long long quickpow(long long a,long long b)
        {
        	long long ret=1;
        	while(b!=0)
        	{
        		if(b%2==1) 
        		{
        			ret=(ret*a%M)%M;
        		}
        		a=a*a%M;
        		b/=2;
        	}
        	return ret%M;
        }
        long long a,b,c;
        long long k;
        long long t;
        int main()
        {
        	cin>>t;
        	while(t--)
        	{
        		cin>>a>>b>>c>>k;
        		if(b-a==c-b) 
        		{
        			long long d=(b-a)%M;
        			cout<<((k-1)%M*d+a%M)%M<<endl;;
        		}
        		else 
        		{
        			long long d=b/a%M;
        			cout<<(quickpow(d,k-1)*a%M)%M<<endl;
        		}
        	}
        	return 0;
        }
        

        模拟题,不太难······求点赞栓Q

        • 1

        信息

        ID
        502
        时间
        1000ms
        内存
        512MiB
        难度
        7
        标签
        递交数
        97
        已通过
        26
        上传者