NC19967. [HAOI2007]反素数ANT
描述
输入描述
一个数N(1 ≤ N ≤ 2,000,000,000)。
输出描述
不超过N的最大的反质数。
示例1
输入:
1000
输出:
840
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 428K, 提交时间: 2022-08-03 17:02:02
#include<bits/stdc++.h> typedef long long ll; ll p[12]={2,3,5,7,11,13,17,19,23,29,31,37}; ll mx,ans,tot; void dfs(ll k,int d,int w,int t){ if(tot==t&&ans>k) ans=k; if(tot<t) tot=t,ans=k; if(d>11) return ; for(ll i=0,s=1;k*s<=mx&&i<=w;++i,s*=p[d]) dfs(k*s,d+1,i,t*(i+1)); } int main(){ scanf("%lld",&mx); dfs(1,0,99,1); printf("%lld",ans); return 0; }
C++ 解法, 执行用时: 4ms, 内存消耗: 408K, 提交时间: 2021-12-29 19:49:20
#include <bits/stdc++.h> using namespace std; int n,ans,maxx,pri[20]={0,2,3,5,7,11,13,17,19,23,29,31}; void dfs(int x,int y,long long z,int last){ if(x>12){if(maxx<y||(maxx==y&&ans>z))maxx=y,ans=z;return;} for(int i=0;i<=last&&z<=n;i++,z*=pri[x])dfs(x+1,y*(i+1),z,i); } int main(){ cin>>n; dfs(1,1,1,20); cout<<ans; return 0; }