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 }
以上是关于51 NOD 1013 3的幂的和的主要内容,如果未能解决你的问题,请参考以下文章
51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂
51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式