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;
    }
  • 相关阅读:
    HUD--2553 N皇后问题
    poj--2139
    poj--2236
    poj--2229
    poj--2376 Cleaning Shifts
    poj--3669
    poj--1979 Red and Black
    poj--1258
    经典DP问题--poj1088滑雪
    Poj 1041--欧拉回路
  • 原文地址:https://www.cnblogs.com/LjwCarrot/p/10926000.html
Copyright © 2011-2022 走看看