Description

某一天,qwb去WCfun面试,面试官问了他一个问题:把一个正整数n拆分成若干个正整数的和,请求出这些数乘积的最大值。

qwb比较猥琐,借故上厕所偷偷上网求助,聪明的你能帮助他吗?

Input

第一行为一个正整数T.(T<=100000)

接下来T行,每行一个正整数n(n<=1e9),意义如题目所述。

Output

每一行输出一个整数,表示乘积的最大值,由于答案可能很大,请将答案对109+7取模后输出。

Sample Input

2
2
5

Sample Output

2
6

HINT

2=2

5=2+3

分析:

很容易看出分成2和3最好,并且6=2+2+2=3+3,222=8,3*3=9,说明尽量分成3.

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#define mod 1000000007
using namespace std;
int main()
{
    int T,n,ans,op;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        ans=1;
        op=n/3;
        n=n-op*3;
        for(int i=1; i<=op; i++)
            ans=(ans*3)%mod;
        op=n/2;
        for(int i=1; i<=op; i++)
            ans=(ans*2)%mod;
        printf("%d\n",ans);
    }
    return 0;
}
posted on 2017-06-04 16:47  渡……  阅读(182)  评论(0编辑  收藏  举报