标签:运用 无法 cin 结果 操作 tar origin contest 河北省
题目传送门: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; }
B-Icebound and Sequence(等比数列求和取模)
标签:运用 无法 cin 结果 操作 tar origin contest 河北省
原文地址:https://www.cnblogs.com/LjwCarrot/p/10926000.html