2019河北省大学生程序设计竞赛-B-cebound and Sequence(数学 快速幂)

tech2022-07-07  209

题意思路: 给定公式,意思就是求一个等比数列的值,等比数列求和公式,按照原先的是会超时的,所以需要更快速的公式。 然后在通过快速幂的方式取模,降低复杂度。 呜呜呜,数学没学好,就不推了。 代码:

#include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,q,p; ll qpow(ll q,ll n)//快速幂~(顺便记一下快速幂的板子) { ll res=1; while(n) { if(n&1) res=res*q%p; q=q*q%p; n=n/2; } return res; } ll dengbi(ll n)//等比公式 { if(n==1) return q; if(n&1) { return ((1+qpow(q,(n+1)/2))*(dengbi((n-1)/2))%p+qpow(q,(n+1)/2))%p; } else { return (dengbi(n/2)*(1+qpow(q,n/2))%p); } } int main () { int t;cin>>t; while(t--) { cin>>q>>n>>p; if(q==1) cout<<n<<endl; else cout<<dengbi(n)<<endl;//求值 } }
最新回复(0)