题解 P1463 [POI2002][HAOI2007]反素数
题意:
求最小的
分析:
1.
,
5.指数不升
若存在
综上所述,可以用上述几个约束条件进行搜索剪枝。
代码就是简单的
#include<iostream>
#include<vector>
typedef long long ll;
using namespace std;
const ll pa[16]={0,2,3,5,7,11,13,17,19,23,29};
ll n,ans=1,g=0;
void dfs(ll p,ll t,ll now,ll ng)
{
if(now>n) return;
if(p>10) return;
ll temp=ng;
for(ll i=1;i<=t;i++){
now*=pa[p];
ng=temp*(i+1);
if(now>n) return;
if(ng>g) ans=now,g=ng;
if(ng==g) ans=min(now,ans);
dfs(p+1,i,now,ng);
}
}
signed main()
{
cin>>n;
dfs(1,30,1,1);
cout<<ans;
return 0;
}
//
修改了部分