51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式

1.乘法逆元
直接使用等比数列求和公式,注意使用乘法逆元
---严谨,失细节毁所有
#include "bits/stdc++.h"
using namespace std;
#define rep(i, s, n) for(int i=s;i<n;i++)
#define MOD 1000000007
#define LL long long
const int N=;
LL quick_pow(LL a,LL b)
{
LL ans=;
while(b>){
if(b&){
ans=ans*a%MOD;
}
b>>=;
a=a*a%MOD;
}
return ans;
}
int main()
{
int n;
LL sum;
while(~scanf("%d",&n)){
sum= (quick_pow(, n+) - ) * % MOD;
///求2的逆元即可.因为2 * ? = 1 (mod 1000000007) ? = 500000004
///而不是简单的(quick_pow(3, n+1) - 1) /2 % mod;遇到mod /将/转变为*除数的逆元
printf("%lld\n",sum);
}
return ;
}
扩展欧几里得求乘法逆元
const int mod=;
long long inv(long long a)
{
if(a==)
return ;
return inv(mod%a)*(mod-mod/a)%mod;
}
int main()
{
cout<<inv()<<endl;
}
2.思维,构造递归求和公式
#include "bits/stdc++.h"
using namespace std;
#define rep(i, s, n) for(int i=s;i<n;i++)
#define _MOD 1000000007
#define ll long long
const int N=;
ll c;
ll power(ll a, ll b)
{
ll ans = ;
while (b)
{
if (b & )
{
ans = (ans * a) % _MOD;
}
b >>= ;
a = (a * a) % _MOD;
}
return ans;
} ll sum(ll a, ll k)
{
if (k == )
{
return a;
}
c = sum(a, k >> ); ///前k/2个次幂的和
///ans等于前k/2个次幂的和加上接着的k/2个次幂的和(前k/2个次幂的和乘以第k/2个数的次幂)
ll ans = (c + c * power(a, (k >> ))) % _MOD;
///加上最后一个奇数次方值
if (k & )
{
ans = (ans + power(a, k)) % _MOD;
}
return ans;
} int main()
{
ll n;
scanf("%lld", &n);
printf("%lld\n", ((sum(, n) % _MOD)) + );
return ;
}
带入 4、5试一下,递归的巧妙
参考:http://blog.csdn.net/f_zyj/article/details/51231838
51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式的更多相关文章
- 51nod 1113 矩阵快速幂( 矩阵快速幂经典模板 )
1113 矩阵快速幂 链接:传送门 思路:经典矩阵快速幂,模板题,经典矩阵快速幂模板. /******************************************************* ...
- 51nod 1013 3的幂的和 - 快速幂&除法取模
题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013 Konwledge Point: 快速幂:https:/ ...
- 51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂
这道题我写了两种写法 一种利用逆元 a/b%mod=a*c%mod; (c是b的逆元)易得2的逆元就是5~~~04: 一种是矩阵快速幂 利用递推式得出结论 #include<cstdio> ...
- Educational Codeforces Round 13——D. Iterated Linear Function(矩阵快速幂或普通快速幂水题)
D. Iterated Linear Function time limit per test 1 second memory limit per test 256 megabytes input ...
- 51nod 1013:3的幂的和 快速幂
1013 3的幂的和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 求:3^0 + 3^1 +...+ 3^(N) mod 1000000007 ...
- 51Nod 1046 A^B Mod C Label:快速幂
给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^ ...
- 51Nod - 1242 斐波那契(快速幂)
斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, ...
- 51nod 1013快速幂 + 费马小定理
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013 这是一个等比数列,所以先用求和公式,然后和3^(n+1)有关,有n ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
随机推荐
- 二 Capacity Scheduler 计算能力调度器
官网的写的太难懂,参考:http://www.360doc.com/content/14/0603/14/14935022_383254798.shtml Capacity Scheduler 一种可 ...
- Memory及其controller芯片整体测试方案(上篇)
如果你最近想买手机,没准儿你一看价格会被吓到手机什么时候偷偷涨价啦! 其实对于手机涨价,手机制造商也是有苦难言,其中一个显著的原因是存储器芯片价格的上涨↗↗↗ >>> 存储器memo ...
- 第四次作业之psp
psp 进度条 博文字数累积折线图 代码行数累积折线图 psp饼状图
- lintcode-17-子集
子集 给定一个含不同整数的集合,返回其所有的子集 注意事项 子集中的元素排列必须是非降序的,解集必须不包含重复的子集 样例 如果 S = [1,2,3],有如下的解: [ [3], [1], [2], ...
- centos7 安装 httpd并打开测试页
systemctl start firewalld.service#启动firewallsystemctl stop firewalld.service#停止firewallsystemctl dis ...
- C# 开发者最经常犯的 8 个错误
在和C#新手一起工作的时候,我注意到他们经常重复一些错误.这些错误,当你指出来的时候很容易理解.然而,如果一个开发者没有意识到这些错误,将会影响正在开发的软件的质量和效率,因此,我决定总结8个常见的错 ...
- PHP给图片添加图片水印
涉及到的函数: 1.file_get_contents():用于将文件的内容读入到一个字符串中的首选方法.如果操作系统支持,还会使用内存映射技术来增强性能. 2.list():list() 函数用于在 ...
- JSON字符串书写
{ "XXX公司": [ { "name": "IT部", "mebers": [ { "维护人员&quo ...
- 2018 杭电多校1 - Chiaki Sequence Revisited
题目链接 Problem Description Chiaki is interested in an infinite sequence $$$a_1,a_2,a_3,...,$$$ which i ...
- javaBean默认接受request发送过来的数据,根据键自动设置属性
javaBean默认接受request发送过来的数据,根据键自动设置属性