51nod 1013 3的幂的和(逆元 or 矩阵快速幂)
来源:互联网 发布:数据挖掘实战 pdf 编辑:程序博客网 时间:2024/06/06 12:29
求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
Input
输入一个数N(0 <= N <= 10^9)
Output
输出:计算结果
Input示例
3
Output示例
40
思路:
解法一:等比数列求和公式然后逆元求解。
解法二:可推得Sn = 3*Sn-1 + 1,可构造矩阵快速幂
代码1:
#include<iostream>#include<cstdio>using namespace std;typedef long long ll;const int mod = 1e9+7;ll qmod(ll x, ll p){ ll ans = 1; while(p) { if(p%2) ans = ans*x%mod; x = x*x%mod; p /= 2; } return ans;}int main(void){ ll n; while(cin >> n) printf("%lld\n", (qmod(3, n+1)-1+mod)%mod*(qmod(2, mod-2))%mod); return 0;}
代码2:
#include<iostream>#include<cstdio>using namespace std;typedef long long ll;const int mod = 1e9+7;struct node{ ll s[2][2]; node() {} node(int a, int b, int c, int d) { s[0][0] = a; s[0][1] = b; s[1][0] = c; s[1][1] = d; }};node mul(node a, node b){ node t = node(0, 0, 0, 0); for(int i = 0; i < 2; i++) for(int j = 0; j < 2; j++) for(int k = 0; k < 2; k++) t.s[i][j] = (t.s[i][j]+a.s[i][k]*b.s[k][j])%mod; return t;}node mt_pow(node p, int n){ node q = node(1, 0, 0, 1); while(n) { if(n%2) q = mul(p, q); p = mul(p, p); n /= 2; } return q;}int main(void){ int n; while(cin >> n) { node p = node(3, 1, 0, 1); p = mt_pow(p, n); printf("%d\n", (p.s[0][0]+p.s[0][1])%mod); } return 0;}
阅读全文
1 0
- 51nod 1013 3的幂的和(逆元 or 矩阵快速幂)
- 51nod 1013 3的幂的和(费马小定理+快速幂 or 矩阵快速幂)
- 51Nod 1013 3的幂的和(逆元和快速幂)
- 51nod 1013 3的幂的和(等比数列求和_快速幂+逆元)
- 51Nod 1013 3的幂的和(快速幂+逆元)
- 51nod 1013 3的幂的和 快速幂+乘法逆元
- 51nod 1013 3的幂的和【快速幂+逆元】【学会了手求逆元诶~】
- 51nod 1013 3的幂的和(快速幂+逆元)
- 51Nod-1013 3的幂的和【快速模幂+逆元】
- 51nod 1013 3的幂的和(快速幂+乘法逆元)
- 51Nod 1013 3的幂的和 (快速幂取模+逆元)
- 51nod1013 3的幂的和 (矩阵快速幂 或 逆元+快速幂)
- 51nod 1013【快速幂+逆元】
- 【ZZULIOJ 2180】GJJ的日常之沉迷数学 【逆元 or 矩阵快速幂】
- 51nod 1113 矩阵快速幂 (矩阵的n次方)
- 51nod 1013:3的幂的和 快速幂
- 51Nod 1013 3的幂的和 快速幂
- 【51nod 1126】求递推序列的第N项 【矩阵快速幂】or【枚举找循环节】
- javascript中bind另一个用法
- bitmap海量数据
- 监听器 Listener
- synchronized锁不住?
- 【C语言】计算输入整数中每个数字出现的次数
- 51nod 1013 3的幂的和(逆元 or 矩阵快速幂)
- 机器学习基础(一)——人工神经网络与简单的感知器
- LeetCode-- Longest Substring Without Repeating Characters
- WordPress代码编辑页面支持的HTML标签
- 跟我开始从0学Android--从0学java--java简单介绍开始第一个java项目
- Android实现底部半透明弹出框PopUpWindow
- java三种工厂模式:简单工厂、工厂方法、抽象工厂
- 快速排序法(QuickSort)——交换类排序法(java实现)
- 浅谈CSS盒子模型