今天遇到一个问题,怎么也想不明白,求指点
题目是这样的:
问题描述
将一个数N分为多个正整数之和,即N=a1+a2+a3+…+ak,定义M=a1*a2*a3*…*ak为N的潜能。
给定N,求它的潜能M。
由于M可能过大,只需求M对5218取模的余数。输入格式
输入共一行,为一个正整数N。
输出格式
输出共一行,为N的潜能M对5218取模的余数。
我的思路是这样的:
乘积最大:
规律
1、5=2+3,5<2*3 ,所以不可能分解成5,因为既然你能分成5,为什么不分成乘积更大2+3
2、4=2+2=3+1,其中,2*2与4乘积一样,所以分解的数最大不超过4 ,且最大乘积为4
3、3 2 1中,1肯定越少越好,因为无论多少个1相乘都是1
3越多越好,比如 6=2+2+2=3+3 乘积8<9
4、综上,如果这个数能被3整除,就分解为3+3+3+...
被3除余1 ,就分解位3+3+3+...+1
被3除余2, 就分解位3+3+3+...+2
尽量不要让有1
代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long int n,sum,x,a;
int M=5218;
cin>>n;
if(n%3==0)
{
x=n/3;
sum=pow(3,x);
}
else if(n%3==1)//余数是1的情况 ,余1相当于余4
{
a=n-4;
x=a/3;
sum=pow(3,x)*4;
}
else
{
x=n/3;
sum=pow(3,x)*2;
}
cout<<sum%M<<endl;
return 0;
}
可是结果:
想不明白问题在哪里,求各位指定。