【HAOI2007】反素数
2024-08-31 08:06:18
【题目链接】
【算法】
稍加分析可知,问题等价于“求1到n中,因子个数最多的数,若有多个,求最小的”
那么我们该怎么求这个数呢?
约数个数定理 : x = p1^a1p2^a2p3^a3...pn^an
则x的约数个数为 : (a1 + 1)(a2 + 1)(a3 + 1) ... (an + 1)
我们发现,一定有 : a1 >= a2 >= a3 >= ... an,也就是说,a是一个降序的排列
同时,我们发现,如果我们希望让这个数的因子尽可能多,那么p1...pn要尽可能的小
只需将前10个素数存在一张表内,然后dfs即可
【代码】
#include<bits/stdc++.h>
using namespace std; long long i,n,num = 1e18,ans;
long long prime[] = {,,,,,,,,,,}; template <typename T> inline void read(T &x) {
long long f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x) {
if (x < ) { putchar('-'); x = -x; }
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x) {
write(x);
puts("");
}
inline void dfs(long long dep,long long last,long long sum,long long cnt) {
long long i;
if (sum > n) return;
if ((cnt > ans) || ((cnt == ans) && (sum < num))) {
ans = cnt;
num = sum;
}
if (!last) return;
for (i = ; i <= last; i++) {
dfs(dep+,i,sum,cnt*(i+));
sum *= prime[dep];
if (sum > n) return;
}
} int main() { read(n);
dfs(,,,);
writeln(num); return ;
}
最新文章
- 5 Hbase
- python读取xml文件
- HTML的快速写法:Emmet和Haml
- redmine一键安装
- Djnago的一些零碎知识点
- 排序算法总结(二)归并排序【Merge Sort】
- 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 <;ModificationFunctionMapping>; 元素中没有支持当前操作的 <;InsertFunction>; 元素。
- ios的一些开源资源
- mysql 常用技巧
- 浅谈TCP三次握手和四次挥手
- rest framework 认证 权限 频率
- 读取FTP 图片文件,并显示,非下载
- spring面向接口编程
- 你电梯没了—OO第二单元作业思考
- HTTP Get Post究竟有哪些区别
- pytest十二:cmd命令行参数
- 2019热门JAVA面试问题
- 新.Net架构必备工具列表
- rhel7配置yum的方法
- WordCount_命令行运行时指定参数
热门文章
- BGP表
- 自定义PHP错误报告处理方式
- 获得HttpServletRequest 和HttpSession对象
- 洛谷——P1451 求细胞数量
- java基础编程题
- stored procedure --存储过程
- JAVA原始的导出excel文件,快捷通用 方便 还能够导出word文档哦
- Android双向seekbar(带刻度)
- C#中泛型方法与泛型接口 C#泛型接口 List<;IAll>; arssr = new List<;IAll>;(); interface IPerson<;T>; c# List<;接口>;小技巧 泛型接口协变逆变的几个问题
- 分享一个基于Bootstrap的 ACE框架 入门(MVC+EF)