注意注意:当&符号和==一起出现的时候,要给&部分上括号,虽然优先级&的高

#include<iostream>
using namespace std;
typedef long long ll;
long long a,b,x, ans=1;
ll quick_power(ll a,ll b, ll p) {//求a的b次时间复杂度logn
long long multiple = 1;//初始化在快速幂函数中防止每次求幂的值累加
while (b) {
//long long multiple = 1;
if (b & 1) {
multiple = (multiple * a)%p;
}
a = (a * a) %p;
b = b / 2;
}
return multiple;
}
ll sum(ll q, ll m,ll p) {//递归求等比数列/从i=1开始到n的等比数列
if (m ==1) {
return q%p;
}
if ((m &1)==0) {//表示m为偶数
return ((1 + quick_power(q, m / 2, p)) * sum(q, m / 2, p)) % p;
//((1+pow_m(q,n/2,p))*solve(q,n/2,p)%p+pow_m(q,n,p))%p
}
else
return ((1 + quick_power(q, m / 2, p)) * sum(q, m / 2, p) % p + quick_power(q, m, p)) % p;
}//(1+pow_m(q,n/2,p))*solve(q,n/2,p)%p;
int main() {
ll n,p;
cin >> n;
while (n--) {
cin >> a >> b>>p;
cout << sum(a, b, p) << endl;
}
return 0;
}第二种求和的方法第二种时间复杂度高
int q,n;
int res=0;
int t=1;
for( int i=1;i<=n;i++)//从n等于1 开始到n
{
t=t*q%p;
res=(res+t)%p;//res=res*q+1;
}
cout<<res<<endl;
实现结果展示:

该代码示例展示了如何使用C++的快速幂算法计算一个数的幂并优化等比数列的求和过程,通过递归处理偶数项和奇数项,降低时间复杂度。
3079

被折叠的 条评论
为什么被折叠?



