您的位置:首页 > 其它

51nod 1013 3的幂的和【快速幂+逆元】【学会了手求逆元诶~】

2016-12-05 19:32 302 查看
1013 3的幂的和

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

求:3^0 + 3^1 +...+ 3^(N) mod 1000000007

Input
输入一个数N(0 <= N <= 10^9)


Output
输出:计算结果


Input示例
3


Output示例
40


思路:

1、定义x,使得A*x==1(mod y)其中A是最小满足这个式子的数,其A就是x对y的逆元。

如果有:

A/BmodC==x(x为所求),那么我们就可以寻找B对C的逆元,使得除法变成乘法;若此时设定D为B的逆元:

(A/B)*(B*D)modC==x;----------------->A*D%C即为所求。

2、这个题很明显是一个等比数列求Sn,那么对应套上公式即可。

3、因为只学了个概念,所以我只会手求1e9+7的逆元,不会套入算法,代码就凑合着看吧- -

Ac代码:

#include<stdio.h>
#include<string.h>
using namespace std;
#define mod 1000000007
#define ll __int64
ll poww(ll a,ll b)
{
ll tmp=a%mod;
ll ans=1;
int n=b;
while(n)
{
if(n%2==1)
{
ans=(ans*tmp)%mod;
n-=1;
}
else
{
tmp=(tmp*tmp)%mod;
n/=2;
}
}
return ans;
}
int main()
{
ll n;
while(~scanf("%I64d",&n))
{
if(n==0)printf("1\n");
else
{
n++;
ll output=(((poww(3,n)-1)*500000004)%mod+mod)%mod;
printf("%I64d\n",output);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  51nod 1013