前言
本题用快速幂 与数论中正整数分解使得乘积最大问题。
快速幂模板:
LL qmi(LL a,LL k,int q) // a和 k记得用long long 不然数据大会超时
{
LL res=1%q;
while(k)
{
if(k&1) res=res*a%q;
a = (LL)a*a%q;
k=k>>1;
}
return res;
}
正整数分解使得乘积最大问题:
推荐一篇文章:数论 - 正整数分解使得乘积最大问题
题目详情
解题代码
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int mod = 5218;
LL n;
LL qmi(LL a,LL k,int q)
{
LL res=1%q;
while(k)
{
if(k&1) res=res * a%q;
a = (LL)a*a%q;
k=k>>1;
}
return res;
}
int main()
{
scanf("%lld",&n);
LL k,res;
k=n/3;
int h;
h=n%3;
if(n!=1)
{
if(h==0) res=qmi(3,k,mod);
else if(h==1) res=qmi(3,k-1,mod)*4;
else res = qmi(3,k,mod)*2;
}
else res = n; //注意 n = 1这种情况
printf("%lld",res%mod);
return 0;
}