一、快速幂模板
1. 算a^b mod p ((a^b)%p )
当数字较大时,会超过long long,所以进行优化:乘一个,模一个。
(a*b)%p = [(a%p) * (b%p)] % p
typedef long long ll;
ll ksm(ll a, ll b, ll p)
{
ll ans = 1;
a = a % p; //可写可不写,当a比较大时写
while(b > 0)
{
if(b % 2 == 1) //即幂为奇数时
{
ans = ans * a % p;
}
a = a * a % p;
b /= 2;
}
return ans;
}
(把代码中%p去掉就变成单纯的a^b的运算)
二、
1.eg:给m,n为2,4,则ans = a^2 + a^3 + a^4 出处
此题注意:for中套while不好,用函数。
加一次模一次:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e9 + 7;
ll ksm(ll a, ll b)
{
a %= N;
ll ans = 1;
while(b > 0){
if(b % 2 == 1)
ans = ans * a % N;
a = a * a % N;
b /= 2;
}
return ans;
}
int main()
{
ll m, n;
ll sum = 0;
cin >> n >> m;
for(ll i = n; i <= m; i ++)
{
sum = (sum + ksm(4, i)) % N; //加一个模一次
}
cout << sum;
return 0;
}