hdu 4542 打表+含k个约数最小数
来源:互联网 发布:索尼xperiaz1手机网络 编辑:程序博客网 时间:2024/06/05 23:51
http://acm.hdu.edu.cn/showproblem.php?pid=4542
给出一个数K和两个操作
如果操作是0,就求出一个最小的正整数X,满足X的约数个数为K。
如果操作是1,就求出一个最小的X,满足X的约数个数为X-K。
对于操作0,分析见这里,搜索需要有力剪枝。对于操作1,代表1至X中不是X的约数个数为K,看似还是搜索,但是由于时限卡的丧心病狂...所以用打表完成
d[i]先用来表示i的约数个数,然后可以模仿素数打表,对于每个数的每个倍数,其d值都自减1,这样就求出每个i对应的d[i](非约数个数)
又由于然后对于i来讲,一定有d[i]<i,那么我们只需在求d[i]的过程中将其映射关系调换为指定非约数个数的最小的数,方法就是
if(!d[d[i]]) d[d[i]] = i; d[i] = 0;仔细想想这两句话的意思!
#pragma comment(linker, "/STACK:36777216")#pragma GCC optimize ("O2")#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <queue>#include <map>#include <iostream>#include <algorithm>using namespace std;#define RD(x) scanf("%d",&x)#define RD2(x,y) scanf("%d%d",&x,&y)#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)#define clr0(x) memset(x,0,sizeof(x))#define eps 1e-9const double pi = acos(-1.0);typedef long long LL;typedef unsigned long long ULL;const int modo = 1e9 + 7;const int INF = 0x3f3f3f3f;const int maxn = 1005,N = 50000;int n,pr[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};LL ans;int d[N];void Init(){ for(int i = 1;i < N;i++) d[i] = i; for(int i = 1;i < N;i++) { for(int j = i;j < N;j += i) d[j]--; if(!d[d[i]]) d[d[i]] = i; d[i] = 0; }// for(int i = 1;i < 100;++i){// cout<<i<<':'<<d[i]<<endl;// }}void dfs(int dep,int cnt,LL res){ if(cnt > n) return; if(cnt == n){ ans = min(ans,res); return ; } for(int i = 1;i <= 62;++i){ if(res > ans/pr[dep] || cnt*(i+1) > n) break; res *= pr[dep]; if(n % (cnt*(i+1)) == 0) dfs(dep+1,cnt*(i+1),res); }}int main(){ Init(); int _,cas = 1;RD(_); while(_--){ int type; RD2(type,n); if(type) ans = d[n]; else{ ans = 1LL<<62; dfs(0,1,1); } printf("Case %d: ",cas++); if(ans == 0) puts("Illegal"); else if(ans >= 1LL<<62) puts("INF"); else printf("%I64d\n",ans); } return 0;}
0 0
- hdu 4542 打表+含k个约数最小数
- Codeforces Beta Round #27 E. Number With The Given Amount Of Divisors 含n个约数最小数
- 【HDU4542】【反素数+DFS+暴力打表】【给出一个数K,和两个操作,如果操作是0,就求出一个最小的正整数X,满足X的约数个数为K,如果操作是1,就求出一个最小的X,满足X的约数个数为X-K】
- k个最小的数
- 含k个3的数
- 30:含k个3的数
- 求K个最小的数
- boj_420_求第k个最小数
- 找第K个最小数
- 堆排序中求前K个最小数
- hdu 6040 卡时间+找第k个最小的数 2017 Multi-University Training Contest
- HDU 4542 小明系列故事——未知剩余系(反素数+最小的n使得n的约数为n-k(k已知))
- POJ NOI0105-30 含k个3的数【数制】
- N个整数寻找k个最小的数
- hdu 5019 第k大公约数
- 线性时间内查找第k个最小数
- 求数组中第k个最小数
- 实现数组获取前K个最小数
- Ubuntu Linux平台下Django1.6.8开发环境搭建
- 特征生成
- jdk的设置及安装android studio提示does not point to a valid jvm问题
- JProfiler 解决 Java 服务器的性能跟踪
- C#遍历设置计算机分辨率
- hdu 4542 打表+含k个约数最小数
- Java探索之旅(9)——数据和方法的可见性
- Java反射机制
- 3.struts中的注解
- Yii 面包屑制作
- xdebug 安装
- 性能调优攻略
- 第十周项目2-M$pszi$y是嘛意思?
- 两个栈实现队列与两个队列实现栈