51nod 1013 3的幂的和 - 快速幂&除法取模

时间:2024-04-14 13:27:56

题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013

Konwledge Point:

快速幂:https://www.cnblogs.com/liubilan/p/9450568.html

除法取模:(a/b)%mod = (a%(b*mod))/b

      当a/b比mod小,而a又比mod大的时候a先取余再除以b就会产生错误;为了避免这个错误,只需将模数乘以b即可;

这个题目其实就是找规律,n 有1e9大,不管是常规做法还是快速幂直接相加都会超时;

打表得知:S(n) = 3*S(n-1)+1;   //S(n)表示3的0次到3的n次的和;

     又因为S(n) = S(n-1) + 3的n次;

    联立两个方程可以得到S(n) = (3的n+1次-1)/2;

附代码:

 #include<iostream>
using namespace std; #define LL long long
const LL MOD = ;
LL n; LL pow(LL x)
{
LL ans=, tmp=;
while(x) {
if(x&) {
ans *= tmp;
ans%=(MOD*);
}
tmp *= tmp;
tmp %= (MOD*);
x>>=;
}
return ans;
} int main()
{
while(cin>>n)
{
cout<<(pow(n+)-)/<<endl;
} return ;
}