51Nod-1060-最复杂的数
2016-08-17 01:35
204 查看
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即可。
描述
题解
百度百科:对于任何正整数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; }
参考
《反素数》相关文章推荐
- axis 传输 简单对象,复杂对象,List,Map等收藏
- webservices复杂类型值传递
- 第二周项目三体验时间复杂度(1)
- 南方日报:不是我不用3G,是升级3G太复杂
- 2014年的项目的总结(二) 谨防过度设计 别为显示技术而搞复杂 杀鸡焉用牛刀?
- Access control allow origin 简单请求和复杂请求
- 排序算法实现及复杂度分析(一)
- [LeetCode]Copy List with Random Pointer &Clone Graph 复杂链表的复制&图的复制
- spirngmvc js传递复杂json参数到controller
- 动态规划求数组中和最大字串的值 以及 字符串的循环移位(要求空间复杂度O(1),时间复杂度O(n))
- L - Abbott's Revenge(比较复杂的bfs)
- 复杂透视表的SQL生成方法
- ASP.NET 2.0中GridView无限层复杂表头的实现
- js正则表达式:验证邮箱格式、密码复杂度、手机号码、QQ号码
- Hibernate入门到开发五之复杂属性的映射
- 每天一道算法题2 删除链表结点(时间复杂度为O(1)))
- el表达式取复杂map数组的值
- 自定义DialogFragment实现复杂Dialog
- csdn网友问:读取复杂格式的XML文件。
- Activity之间通过Intent传递复杂Customer Object的两种方式