Problem Description
给出正整数n和m,把n拆成m个非负整数之和,使得这m个数的乘积最大。输出乘积对1000000007取模的结果。
Input
输入第一行为一个正整数T,表示有T组测试数据。
接下去T行,每行为一组数据。每行两个正整数n、m,含义如上。
n在32位signed int范围内,m<=100000,T<=100。
Output
每组数据一行,输出乘积对1000000007取模的结果(最后一组后也要换行)。
Sample Input
2
2 2
1234 3
Sample Output
1
69595452
解题思路
尽可能使每个数平均,乘积会最大.
参考代码
#include <stdio.h>
#define MOD 1000000007
typedef __int64 ll;
int main()
{
int T;
scanf("%d",&T);
while (T--){
ll n,ans = 1;
int m;
scanf("%I64d %d",&n,&m);
int t = n/m,left = n - t*m,cnt;
for (int i = 1;i <= m;i++){
cnt = t;
if (left > 0){
cnt++;
left--;
}
ans = (ans*cnt)%MOD;
}
printf("%I64d\n",ans);
}
return 0;
}