2019E1_G 等比數列求和

等比數列求和

題目

已知 ai=a1×qi1a_{i}=a_{1}×q^{i-1},求 sumi=1naisum_{i=1}^{n}a_{i}
結果可能很大,請對987654323取模

輸入

第一行一個正整數t,表示數據組數

接下來t行,每行三個整數 n,a1,qn,a_{1},q

(0<n,a1,q<109,0<t<10000)(0<n,a_{1},q<10^{9},0<t<10000)

輸出

t 行,每行輸出一個整數,表示等比數列的和 mod 987654323 的值。

輸入樣例

2
3 2 7
3 2 1

輸出樣例

114
6

思路

這裏只給分治做法。

設等比數列和爲 SS

當n爲偶數的時候 Sn=Sn/2+an/2+1×Sn/2S_{n}=S_{n/2}+a_{n/2+1}×S_{n/2}

當n爲奇數的時候 Sn=Sn/2+an/2+1×Sn/2+anS_{n}=S_{n/2}+a_{n/2+1}×S_{n/2}+a_{n}

結合快速冪,總體複雜度爲 lognlogn

代碼

  • 分治
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;
typedef long long ll;
const int mod = 987654323;

ll qpow(ll a, ll n)
{
    ll x = a, res = 1;
    while (n > 0)
    {
        if (n & 1) res = (res*x) % mod;
        x = (x*x) % mod;
        n >>= 1;
    }
    return res % mod;
}
ll f(ll q, ll n)
{
    if (n == 1) return 1;
    ll tmp = f(q, n / 2);
    tmp = (tmp + tmp * qpow(q, n / 2)) % mod;
    if (n & 1)
    {
        return (tmp + qpow(q, n - 1)) % mod;
    }
    return tmp;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    ll a, n, q;
    int t;
    cin >> t;
    while (t--)
    {
        cin >> n >> a >> q;
        cout << (a*f(q, n)) % mod << "\n";
    }
    return 0;
}
#include <iostream>
using namespace std;

const int MOD=987654323;
unsigned long long sum(unsigned long long n,unsigned long long k)
{
    n%=MOD;
    unsigned long long ans=0;
    unsigned long long power=n;
    unsigned long long powersum=n;//S(y)
    unsigned long long mul=1;//a^x
    while (k)
    {
        if (k&1)
        {
            ans+=mul*powersum;
            ans%=MOD;
            mul*=power;
            mul%=MOD;
        }
        powersum*=(power+1);
        powersum%=MOD;
        power*=power;
        power%=MOD;

        k>>=1;
    }
    return ans;
}
int main()
{
    int T;
    cin>>T;
    while(T--){
        unsigned long long n,k,a;
        cin>>k>>a>>n;
        cout<<(((sum(n,k-1)+1%MOD)%MOD)*(a%MOD))%MOD<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章