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]最大的反素数
*/

posted on 2011-11-13 12:04  4.5.6  阅读(238)  评论(0编辑  收藏  举报