思路:
将这个数分为n个3和一个其他的数,(不能是1)若还是3则ans=pow(3,num/3)
若是2则ans=pow(3,num/3)*2,若是4则ans=pow(3,num/3-1)*4
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
ll mod=5218;
ll n,tem,ans;
ll fun(ll a,ll b){
ll res=1;
while(b){
if(b&1)//b%2==1
res=res*a%mod;
a=a*a%mod;
b>>=1;//b/=2;
}
return res;
}//快速幂
int main(){
scanf("%lld",&n);
if(n==1){
printf("1\n");
return 0;
}
if(n%3==0){
ans=fun(3,n/3);
}
else if(n%3==2){
ans=2*fun(3,n/3);
}
else{
ans=4*fun(3,n/3-1);
}
printf("%lld",ans%mod);
return 0;
}
快速幂:
大佬笔记链接:
https://zhuanlan.zhihu.com/p/95902286
1.递归
#define MOD 1000000007
typedef long long ll;
ll qpow(ll a, ll n)
{
if (n == 0)
return 1;
else if (n % 2 == 1)
return qpow(a, n - 1) * a % MOD;
else
{
ll temp = qpow(a, n / 2) % MOD;
return temp * temp % MOD;
}
}
2.非递归
//非递归快速幂
int qpow(int a, int n){
int ans = 1;
while(n){
if(n&1) //如果n的当前末位为1
ans *= a; //ans乘上当前的a
a *= a; //a自乘
n >>= 1; //n往右移一位
}
return ans;
}