bzoj1053: [HAOI2007]反素数ant
来源:互联网 发布:购买域名骗局 编辑:程序博客网 时间:2024/04/24 05:40
把数分解成质数乘积的形式,它的约数个数就可以表示成每个质因数的指数+1的和
明显一个可能是答案的数较小的质因数的指数应比较大质因数的指数小
然后暴力枚举出这样的数就行了
#include <cstdio>#include <cstring>#include <queue>using namespace std;#define MAXP 10long long n;int p[MAXP] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};struct qtype{ long long data; int ct[MAXP]; qtype(long long _data, int *_ct) : data(_data) { memcpy(ct, _ct, sizeof(ct)); } bool operator> (const qtype &x)const { return data > x.data; }};int ct[MAXP] = {0};priority_queue<qtype, vector<qtype>, greater<qtype> > q;int main(){ scanf("%lld", &n); q.push(qtype(1, ct)); long long ans = 1, mct = 0, last = 0; while (!q.empty()) { long long a = q.top().data; memcpy(ct, q.top().ct, sizeof(ct)); q.pop(); if (a == last) continue; last = a; long long t = 1; for (int i = 0; i < MAXP; ++i) t *= ct[i] + 1; for (int i = 0; i < MAXP && a * p[i] <= n; ++i) { if (i && ct[i] + 1 > ct[i - 1]) continue; ++ct[i]; q.push(qtype(a * p[i], ct)); --ct[i]; } if (t > mct) mct = t, ans = a; } printf("%lld\n", ans); return 0;}
0 0
- bzoj1053 [HAOI2007]反素数ant
- bzoj1053: [HAOI2007]反素数ant
- BZOJ1053: [HAOI2007]反素数ant
- [BZOJ1053][HAOI2007]反素数ant
- BZOJ1053: [HAOI2007]反素数ant
- 【bzoj1053】【HAOI2007】反素数ant
- bzoj1053[HAOI2007]反素数ant
- 【bzoj1053】 [HAOI2007]反素数ant
- bzoj1053: [HAOI2007]反素数ant
- bzoj1053 [HAOI2007] 反素数ant
- Bzoj1053 [HAOI2007]反素数ant
- bzoj1053: [HAOI2007]反素数ant
- 【bzoj1053】[HAOI2007]反素数ant DFS
- [dfs] BZOJ1053: [HAOI2007]反素数ant
- 【结论+暴搜】BZOJ1053 [HAOI2007]反素数ant
- 【bzoj1053】[HAOI2007]反素数ant(数论)
- BZOJ1053(HAOI2007)反素数ant--暴搜
- 【BZOJ1053】【HAOI2007】反素数ant 打表。/搜索
- 驱动篇之注册表操作
- 大数据的机会与风险
- json+struts2+ajax+list实现异步传输一个列表
- oracle 日期格式
- 【HDU】3698 Let the light guide us 线段树+DP
- bzoj1053: [HAOI2007]反素数ant
- KMP PKU 2406
- Android的Audio系统
- T-SQL DateTime相关的函数使用示例
- Sublime Text 使用介绍、全套快捷键及插件推荐
- POJ 1274 The Perfect Stall(二分匹配 最大匹配数)
- Linux下Patch命令用来打补丁和卸载补丁
- 输入任意10个数,找出最大的数并打印出
- ios学习笔记基础-c语言01基本了解