一本通 1615:【例 1】序列的第 k 个数

传送门

我在这里!


思路

输入一个序列的前三个数并求出这个序列的第K项,这个数列不是等比序列就是等差数列,等差数列比较好判断,如果序列中\(a_{i+2}-a_{i+1}=a_{i+1}-a_{i}\),那他肯定是等差数列,然后根据通项式\(a_{n}=a_{1}+{n-1}*d就可以求出第N项\)(\(d\)为一个常数,\(d=a_{i}-a_{i-1}\)).至于剩下的就一定是等比数列了,但求第N项的时候,\(a_{n}=a_{1}*q^{n-1}\),求q的n-1次方需要使用快速幂

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll a,b,c,k,d,res;
ll t;
const ll M=200907;

ll quickpower(ll a,ll b) {
    ll ret=1;
    while(b) {
        if(b&1)ret=(ret*a)%M;
        b>>=1;
        a=a*a%M;
    }
    return ret;
}

int main() {
    scanf("%lld",&t);
    while(t--) {
        cin>>a>>b>>c>>k;
        if((c-b)==(b-a)) {
            d=(b-a)%M;
            res=(a+(k-1)%M*d)%M;
        } else {
            d=(b/a)%M;
            res=a%M*quickpower(d,k-1)%M;
        }
        cout<<res<<"\n";
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 20:30
工作没了,落户没了,什么都没了
梦想是成为七海千秋:是因为什么原因呀,如果是因为导师恶意卡你就和他爆了
点赞 评论 收藏
分享
在开会的单身狗很有一套:学院本被想着这么快有面试,而且简历废话太多了 那些在校经历什么荣誉什么的企业不关心
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务