33,007
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define N 251
__int64 dp[N][N];
int prime[] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191,
193, 197, 199, 211, 223, 227, 229, 233, 239, 241};
main()
{
int i,j,k,idx;
__int64 t;
j=2;
for (i=2;i<N ;i++ )
{
dp[i][1]=1;
if (i==j)
{
dp[i][2]=j;
j*=2;
}
else
{
dp[i][2]=j/2;
if (i==j/2+1)
{
dp[i][2]/=2;
}
}
}
idx=1;
for (i=2; i<N;i++ )
{
if (i==prime[idx+1])
{
idx++;
}
for (j=2; j<=idx; j++)
{
int power,count;
dp[i][prime[j]]= dp[i][prime[j-1]];
k= prime[j];
while (k<=i)
{
t=k*dp[i-k][prime[j-1]];
if (t>dp[i][prime[j]])
{
dp[i][prime[j]]=t;
}
k*= prime[j];
}
}
for (j=idx+1;j<sizeof(prime)/sizeof(int) ;j++ )
{
dp[i][prime[j]]=dp[i][prime[j-1]];
}
printf("%d:%I64d\n",i,dp[i][prime[idx]]>i?dp[i][prime[idx]]:i);
}
}