Link:
Solution:
关键要看出几个性质:
1、虽然$2e9$很大,但最多也只能由前12个素数组成
2、对于每一个“反素数”,随着质因数的增大,系数必然减小
(否则可将两质因数交换,得到的值必然更小)
接下来直接$dfs$即可
Code:
#includeusing namespace std;typedef long long ll;ll n,res=1,g=1;int pri[15]={ 0,2,3,5,7,11,13,17,19,23,29,31,37};void dfs(int dep,ll cur,int cnt,int top){ if(dep==12) { if((cur>res&&cnt>g)||(cur<=res&&cnt>=g)) res=cur,g=cnt; return; } ll t=1; for(int i=0;i<=top;i++) { dfs(dep+1,cur*t,cnt*(i+1),i); t*=pri[dep];if(cur*t>n) return; }}int main(){ scanf("%lld",&n); dfs(1,1,1,30); printf("%lld",res); return 0;}