B-Icebound and Sequence(等比数列求和取模)
Posted ljwcarrot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于B-Icebound and Sequence(等比数列求和取模)的主要内容,如果未能解决你的问题,请参考以下文章
1140 Look-and-say Sequence (20)
Hello 2020 B. New Year and Ascent Sequence
PAT 1140 Look-and-say Sequence