198. 反素数
// 198. 反素数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://www.acwing.com/problem/content/200/
对于任何正整数 x,其约数的个数记作 g(x),例如 g(1)=1、g(6)=4。
如果某个正整数 x 满足:对于任意的小于 x 的正整数 i,都有 g(x)>g(i),则称 x 为反素数。
例如,整数 1,2,4,6 等都是反素数。
现在给定一个数 N,请求出不超过 N 的最大的反素数。
输入格式
一个正整数 N。
输出格式
一个整数,表示不超过 N 的最大反素数。
数据范围
1≤N≤2∗109
输入样例:
1000
输出样例:
840
输出
1745944200
标准答案
1396755360
*/
#include <iostream>
using namespace std;
const int a[9] = { 2,3,5,7,11,13,17,19,23 };
long long n;
long long curr;
long long maxd;
long long ans;
void dfs(int idx, int lastmi,long long num) {
if ( (curr > maxd) || (curr == maxd && num < ans) ){
maxd = curr;
ans = num;
//cout << "dfs " << maxd << " " << ans << endl;
}
if (idx >= 9 || num > n) {
return;
}
dfs(idx + 1, 0, num);
for (int i = 1; i <= lastmi; i++) {
num *= 1ll*a[idx];
if (num > n) break;
curr = curr*(1ll + i);
dfs(idx + 1, i, num);
curr = curr/(1ll + i);
}
return;
}
int main()
{
cin >> n;
curr = 1; ans = 1;
dfs(0, 31,1);
//cout << maxd << endl;
cout << ans << endl;
return 0;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力

