zoukankan      html  css  js  c++  java
  • B-Icebound and Sequence(等比数列求和取模)

    题目传送门:B-Icebound and Sequence(19年河北省赛)

    题目大意:

    等比数列求和,结果取模

    分析:

    因为取模操作,直接运用等比数列求和公式无法做出,所以需要用到公式

    求等比为k的等比数列之和S[n]..当n为偶数..S[n] = S[n/2] + pow(k,n/2) * S[n/2]

                           n为奇数...S[n] = S[n/2] + pow(k,n/2) * S[n/2] + pow(k,n)等比数列第n个数的值

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n,q,p;
    ll pow_m(ll a,ll b,ll m)
    {
        ll res=1;
        while(b)
        {
            if(b&1)
                res=(res*a)%m;
            a=(a*a)%m;
            b>>=1;
        }
        return res;
    }
     
    ll solve(ll q,ll n,ll p)
    {
        if(n==1)return q%p;
        if(n%2==0)return (1+pow_m(q,n/2,p))*solve(q,n/2,p)%p;
        else return ((1+pow_m(q,n/2,p))*solve(q,n/2,p)%p+pow_m(q,n,p))%p;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            cin>>q>>n>>p;
            cout<<solve(q,n,p)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    apache 错误日志
    搭建服务器
    vim配置
    临时表增加查询速度
    如何清空$_POST or $_GET
    hdu 2084
    快速幂
    zjut 1176
    rwkj 1091
    zjut 1090 --------同余定理的应用
  • 原文地址:https://www.cnblogs.com/LjwCarrot/p/10926000.html
Copyright © 2011-2022 走看看