qwb去面试 小小的思维

来源:互联网 发布:淘宝v6是最高等级吗 编辑:程序博客网 时间:2024/05/16 19:24

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

5=2+3
2=2

题意

题解:

把可分的数看成线性的 那么有(nx)x 求这个函数的最大值 求导可得x=e时可取的最大值 整数大概就是2,3附近 更接近3吧

AC代码

#include <cstdio>typedef long long ll;const int MOD = 1e9+7;ll q_mod(ll a,ll b){    ll temp = 1;    a%=MOD;    while (b){        if (b&1){            temp=temp*a%MOD;        }        a=a*a%MOD;        b>>=1;    }    return temp;}int main(){    int t;    ll n;    scanf("%d",&t);    while (t--){        ll ans = 0;        scanf("%lld",&n);        if (n == 1) ans=1;        else if (n%3==0){            ans = q_mod(3,n/3)%MOD;        }else if (n%3==1){            ans = q_mod(3,n/3-1)*4%MOD;        }else ans = q_mod(3,n/3)*2%MOD;        printf("%d\n",ans);    }    return 0;}
原创粉丝点击