标签:
虽然这题很水,但蒟蒻还是想了很久。
首先由一个很显然的结论,这题只会用到10个质数。
一个感性的证明:
设有一数
那么我们现在要给
显然我们我们要乘第
于是我们看到
所以只需要10个质数。
然后想了很久继续用数学方法做,无果,后来发现其实是搜索= =
code:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int prime[11]={0,2,3,5,7,11,13,17,19,23,29};
int mi[11]={0,30,19,13,11,8,8,7,7,6,6};
int n;
long long sum=1,tot=1,ansi=1,ansm=1;
void work(int i)
{
int j;
long long t=prime[i];
if (sum>n) return;
if (tot>ansi||(tot==ansi&&sum<ansm))
{
ansi=tot;
ansm=sum;
}
for (j=1;j<=mi[i];++j)
{
tot=tot*(j+1);
sum=sum*t;
work(i+1);
sum/=t;
tot/=(j+1);
t*=prime[i];
}
}
int main()
{
int i,ans=1,t=1;
scanf("%d",&n);
if (n==1)
printf("1\n");
else
{
work(1);
printf("%lld",ansm);
}
}
标签:
原文地址:http://blog.csdn.net/lcomyn/article/details/46349847