3的幂的和 51Nod - 1013(快速幂+等比数列求和+逆元)
2017-11-28 05:24
211 查看
3的幂的和
51Nod - 1013求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
Input 输入一个数N(0 <= N <= 10^9) Output 输出:计算结果 Sample Input
3
Sample Output
40
思路:一开始都想到了用等比数列公式再加上一个快速幂取模求结果,但是提交上去就一直wa,后来听说要求逆元,但是还是不明白为什么要求逆元,虽然我知道取模的等介变形中没有除法,但是我当时想,我没想等介变形啊,我就想用个最终结果取模,咋就不一样呢,后来终于发现,(q^(n+1)-1)/2这个式子中,q^(n+1)的结果是用快速幂取模算的,所以这个结果就已经无意识的取模了,也就是说,我们已经无意识的把取模给除法分配进去了,但是除法又没有取模分配,所以只能变成乘逆元,至于如果求逆元,用费马小定理即可
code:
#include <iostream>
using namespace std;
typedef long long ll;
ll q_pow(ll a,ll b){
ll ans = 1;
while(b){
if(b&1)
ans = ans*a%1000000007;
b >>= 1;
a = a*a%1000000007;
}
return ans%1000000007;
}//快速幂取模
ll getReverse(ll a){
return q_pow(a,1000000005);
}//费马小定理求逆元
int main(){
ll n;
cin >> n;
n++;
ll ans = (q_pow(3,n)-1)*getReverse(2)%1000000007;
cout << ans << endl;
return 0;
}
相关文章推荐
- 51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂
- 51nod 1013 3的幂的和(等比数列求和_快速幂+逆元)
- 等比数列求和 (快速幂 + 逆元)
- 关于逆元的概念、用途和可行性的思考(附51nod 1013 和 51nod 1256)
- codeforces-327C Magic Five(等比数列求和+快速幂+逆元)
- 51 NOD 1189 阶乘分数(素因子分解+推公式+求逆元)
- HDU1588-Gauss Fibonacci(矩阵快速幂+等比数列二分求和)
- HDU1588 Gauss Fibonacci (矩阵快速幂+等比数列二分求和)
- CodeForces - 226A Flying Saucer Segments 矩阵快速幂或等比数列求和
- 51nod 1013 3的幂的和【快速幂+逆元】【学会了手求逆元诶~】
- 等比数列求和+逆元——算
- POJ 3233 Matrix Power Series (矩阵&快速等比数列求和取模)
- 51Nod——T 1113 矩阵快速幂
- 51 nod 1256 乘法逆元
- hdu 奥运(矩阵快速幂+等比数列快速求和+数论)
- 51nod1081---子段求和(51nod基础:前缀和)
- 51nod 1013【快速幂+逆元】
- H 子段求和(51Nod 1081)
- 51 nod 1126 求递推序列的第N项(矩阵快速幂)
- 51nod 1013 3的幂的和 -逆元加快速幂