51Nod-1060-最复杂的数
来源:互联网 发布:ubuntu ctrl alt f1 编辑:程序博客网 时间:2024/06/05 09:21
ACM模版
描述
题解
百度百科:
对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0 < i < x),都有g(i) < g(x),则称x为反素数。
性质:
No.1 一个反素数的质因子必然是从2开始连续的质数。
No.2 p=2^t1*3^t2*5^t3*7^t4…..必然t1>=t2>=t3>=….
使用反素数原理进行dfs即可。
代码
#include <iostream>typedef long long ll;using namespace std;const int MAXP = 16;const int prime[MAXP] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};ll n, res, ans;void dfs(ll cur, ll num, int key, ll pre) // 当前值/当前约数数量/当前深度/上一个数{ if (key >= MAXP) { return ; } else { if (num > ans) { res = cur; ans = num; } else if (num == ans) // 如果约数数量相同,则取较小的数 { res = min(cur, res); } ll i; for ( i = 1; i <= pre; i++) { if (cur <= n / prime[key]) // cur*prime[key]<=n { cur *= prime[key]; dfs(cur, num * (i + 1), key + 1, i); } else { break; } } }}void solve(){ res = 1; ans = 1; dfs(1, 1, 0, 15); cout << res << ' ' << ans << endl;}int main(int argc, const char * argv[]){ int T; cin >> T; while (T--) { cin >> n; solve(); } return 0;}
参考
《反素数》
0 0
- 51Nod-1060-最复杂的数
- 51Nod 1060 最复杂的数
- 51NOD 1060 最复杂的数
- 51nod 1060 最复杂的数
- 51nod 1060 最复杂的数
- 51nod 1060 最复杂的数
- 51Nod-1060-最复杂的数(反素数)
- 51nod 1060:最复杂的数 反素数
- 51nod 1060 最复杂的数(反素数)
- 51nod 1060 最复杂的数(反素数)
- 51nod-1060 最复杂的数(反素数)
- 51NOD 1060 最复杂的数 【反素数】
- 51nod 1060 最复杂的数 反素数
- 51nod 1060 最复杂的数 数学&dfs剪枝
- 51nod 1060 最复杂的数(反素数)
- 51nod 1060 最复杂的数(反素数)
- 51nod 1060 最复杂的数(数论:反素数)
- 51nod 最复杂的数(反素数)
- 如何使用JW Player来播放Flash并隐藏控制按钮和自定义播放完成后执行的JS
- 为什么在php不推荐使用mysql_*的函数?
- HDOJ 5497 Inversion(两个树状数组)(待解决)
- 通过Gulp使用Browsersync实现浏览器实时响应文件更改
- IO多路复用之epoll函数详解
- 51Nod-1060-最复杂的数
- html5视频播放解决方案
- MYSQL数据库学习笔记1
- java多态
- 使用nexus搭建Maven私服
- 2013年福建省程序设计竞赛省赛题解
- select,poll,epoll优缺点及比较
- 人在广移之不二情书
- FOJ 1686 【DLX 可重复覆盖的DLX】