正题
题目大意
求
(∑i=1na∗qi)mod(109+7)(\sum_{i=1}^na*q^i)\ mod\ (10^9+7)(i=1∑na∗qi) mod (109+7)
解题思路
题目里都给出公式
∑i=1na∗qi=a∗(1−qn)1−q\sum_{i=1}^na*q_i=\frac{a*(1-q^n)}{1-q}i=1∑na∗qi=1−qa∗(1−qn)
其实就是
a∗(qn−1)q−1\frac{a*(q^n-1)}{q-1}q−1a∗(qn−1)
上面那个直接快速幂
下面那个用逆元
codecodecode
#include<cstdio>
#define ll long long
using namespace std;
const ll xjq=1e9+7;
ll a,q,n,m;
ll power(ll x,ll b)
{ll ans=1;x%=xjq;while(b){if(b&1) ans=(ans*x)%xjq;x=(x*x)%xjq;b>>=1;}return ans;
}
int main()
{scanf("%lld",&m);while(m--){scanf("%lld%lld%lld",&a,&q,&n);if(q==1) printf("%lld\n",a*(n%xjq)%xjq);else{ll k=power(q,n)-1;k=(k*a)%xjq;q--;ll inv=power(q,xjq-2);printf("%lld\n",k*inv%xjq);}}
}