51 NOD 1013 3的冪的和
阿新 • • 發佈:2017-10-26
sed 費馬小定理 lld lap span play () splay log
做法:快速冪+求逆元取模
因為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=-1View Code),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的冪的和