51 NOD 1013 3的幂的和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51 NOD 1013 3的幂的和相关的知识,希望对你有一定的参考价值。

做法:快速幂+求逆元取模

因为ans=((3^(n+2))/2)%P

而ans%P/2!=ans/2%P

所以由费马小定理当gcd(a,p)==1&&P为质数时,a^(p-1)≡1(mod p)可得:ans*(p+1)/2≡ans/2  (%p)

然后就可以美滋滋地对ans取模辣

Code:

技术分享
 1 #include <cstdio>
 2 inline int read()
 3 {
 4     register int f=1,k=0;register char c=getchar();
 5     while (c<0||c>9)c==-&&(f=-1),c=getchar();
 6     while (c>=0&&c<=9)k=k*10+c-0,c=getchar();
 7     return k*f;
 8 }
 9 const long long MOD=1000000007;
10 int main()
11 {
12     register int n=read()+1;register long long t=3,ans=1;
13     while (n)
14     {
15         if(n&1)ans=ans*t%MOD;
16         t=t*t%MOD;
17         n>>=1;
18     }
19     printf("%lld\n",ans); 
20     ans-=1;
21     printf("%lld\n",ans*500000004%MOD);
22 }
View Code

 

以上是关于51 NOD 1013 3的幂的和的主要内容,如果未能解决你的问题,请参考以下文章

51 NOD 1013 3的幂的和

51Nod - 1013 - 3的幂的和(分治快速幂)

51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂

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

LeetCode 1780. 判断一个数字是否可以表示成三的幂的和

LeetCode 1780. 判断一个数字是否可以表示成三的幂的和