Description
某一天,qwb去WCfun面试,面试官问了他一个问题:把一个正整数n拆分成若干个正整数的和,请求出这些数乘积的最大值。
qwb比较猥琐,借故上厕所偷偷上网求助,聪明的你能帮助他吗?
qwb比较猥琐,借故上厕所偷偷上网求助,聪明的你能帮助他吗?
Input
第一行为一个正整数T.(T<=100000)
接下来T行,每行一个正整数n(n<=1e9),意义如题目所述。
接下来T行,每行一个正整数n(n<=1e9),意义如题目所述。
Output
每一行输出一个整数,表示乘积的最大值,由于答案可能很大,请将答案对109+7取模后输出。
Sample Input
2
2
5
Sample Output
2 6 这个题要求n拆成数字的乘积的最大值,一定是拆的越细越好,当时我以为要拆成很多2相乘,但是,后来,当n==6时,3*3 >2*2*2,所以,拆成2不如拆成3大,但是我还没弄懂为什么这么拆,等我弄明白 了再来弄,哈,下面先奉献出我的代码:#include <stdio.h> typedef long long LL; const LL mod = 1e9+7; LL quickm(LL a,LL b) { LL ans=1; while(b!=0) { if(b&1) ans=ans*a%mod; a=a*a%mod; b=b/2; } return ans%mod; } int main() { LL t; scanf("%lld",&t); while(t--) { LL n; scanf("%lld",&n); LL ans; if(n==1){ printf("1\n"); continue; } else if(n%3==0) { ans=quickm(3,n/3); } else if(n%3==1) { ans=quickm(3,n/3-1)%mod*4%mod; } else ans=quickm(3,n/3)%mod*2%mod; printf("%lld\n",ans); } }