1.当乘积和最大时,N必须划分成尽可能多的3,剩余的数为2
2.求3的a次幂时,为避免超时,使用快速幂
快速幂模板:
int pow(int x, int y)
{
int ans = 1;
while(y)
{
if(y&1) ans = ans*x%p;
x = x*x%p;
y >>= 1;
}
return ans;
}
源代码如下:
#include <iostream>
#include <cmath>
using namespace std;
long long int ans;
int main()
{
long long int n,a,b=0;
cin>>n;
if(n==1){
cout<<1;
return 0;
}
if(n%3==0)
a=n/3;
else if(n%3==1){
a=n/3-1;
b=2;
}
else if(n%3==2){
a=n/3;
b=1;
}
ans=pow(2,b);
int x=3;
while(a)
{
if(a&1) ans = ans*x%5218;
x = x*x%5218;
a >>= 1;
}
cout<<ans;
return 0;
}