1 条题解

  • 0
    @ 2019-09-24 19:49:03

    #include<bits/stdc++.h>
    using namespace std;
    int T;
    long long mod=200907;//一定要用 long long 否则只有60分 我也不知道为啥
    long long Quick_Pow(long long x,long long y)
    {//快速幂模板
    long long ans=1;
    while(y)
    {//虽然用老师教的的递归也可以 但是用位运算的话 当数据大的时候时间更快 不过难理解
    if(y&1) ans=(ans*x)%mod;
    x=(x*x)%mod;
    y>>=1;
    }
    return ans;
    }
    int main()
    {
    cin>>T;
    for(int i=1;i<=T;i++)
    {
    //等差数列就是指每一个数都等于上一个数再加上一个d(d是一个固定的常数)
    //等比数列就是指每一个数都等于上一个数再乘上一个q(q是一个固定的常数)
    //数列这一块高二的数学 必修五会教 不过当你们看到这篇题解的时候 不知你们教材改了没
    int a,b,c,k;
    cin>>a>>b>>c>>k;
    if(b-a==c-b)
    {//等差数列
    int d,res;
    d=(b-a)%mod;
    res=(a+((k-1)%mod)*d)%mod;
    cout<<res<<endl;
    }
    else
    {//等比数列
    int q,res;
    q=(b/a)%mod;
    res=((a%mod)*(Quick_Pow(q,k-1)%mod))%mod;
    //尽量每算出一块数据的时候就把它给模一下 避免在计算过程中出现数据大于你开的范围
    cout<<res<<endl;
    }
    }
    return 0;
    }
    //来自某届石光中学信竞苟蒻学长 愿看到此文的你 努力码题 为校争光

  • 1

信息

难度
7
分类
快速幂数论 点击显示
标签
递交数
21
已通过
7
通过率
33%
上传者