zjut1613反素数
View Code
#include<iostream>
#include<algorithm>
using namespace std;
int maxn,ans;
int p[]={2,3,5,7,11,13,17,19,23};
int n;
void DFS(int cnt,int num,int pi,int lim)
{
if(num>maxn){maxn=num,ans=cnt;}
else if(num==maxn&&cnt<ans)ans=cnt;
int P=p[pi];
for(int i=1;i<=lim;i++,P*=p[pi])
{
if(cnt*P>n)break;
else
DFS(cnt*P,num*(i+1),pi+1,i);
}
}
int main()
{
while(cin>>n)
{
maxn=1,ans=1;
DFS(1,1,0,20);
cout<<ans<<endl;
}
}
/*zjut1613反素数
反素数第一点:g(x)表示 x含有因子的数目,设 0<i<x 则g(i)<x;
反素数第二个特性:2^t1*3^t2^5^t3*7^t4..... 这里有 t1>=t2>=t3>=t4...
输出[1,n]最大的反素数
*/