小明系列故事——未知剩余系

题意:操作0表示某数有n个约数,操作1为某数有n个非约数;n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2^62输出INF;

Sample Input
3
0 3
1 3
0 10
 
Sample Output
Case 1: 4
Case 2: 5
Case 3: 48
 
思路:对于确定的约数个数(操作0),可以直接建搜索树,深搜即可;里面用了剪枝优化,即当素因子从小到大排序时,指数不递增;还有就是由于各个不同的质因数的指数是按照乘法原理得到最终的约数的,所以每次得到的约数必须能整除最终的约数个数;
对于操作1来说,看了Acdreams的,里面并没有证明为什么直接可以递推到比最大约数个数47777大一些的50005既可以确定d[i]为0时,后面就不可能在出现非约数个数为i的数了;我也没有证明出来...
时间复杂度为O(nlog(n)) 15ms
 
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string.h>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<cmath>
  8. #include<stdlib.h>
  9. #include<time.h>
  10. #include<stack>
  11. #include<set>
  12. #include<map>
  13. #include<queue>
  14. using namespace std;
  15. #define rep0(i,l,r) for(int i = (l);i < (r);i++)
  16. #define rep1(i,l,r) for(int i = (l);i <= (r);i++)
  17. #define rep_0(i,r,l) for(int i = (r);i > (l);i--)
  18. #define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
  19. #define MS0(a) memset(a,0,sizeof(a))
  20. #define MS1(a) memset(a,-1,sizeof(a))
  21. #define MSi(a) memset(a,0x3f,sizeof(a))
  22. #define lson l, m, rt << 1
  23. #define rson m+1, r, rt << 1|1
  24. typedef pair<int,int> PII;
  25. #define A first
  26. #define B second
  27. #define MK make_pair
  28. typedef __int64 ll;
  29. template<typename T>
  30. void read1(T &m)
  31. {
  32. T x=,f=;char ch=getchar();
  33. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  34. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  35. m = x*f;
  36. }
  37. template<typename T>
  38. void read2(T &a,T &b){read1(a);read1(b);}
  39. template<typename T>
  40. void read3(T &a,T &b,T &c){read1(a);read1(b);read1(c);}
  41. template<typename T>
  42. void out(T a)
  43. {
  44. if(a>) out(a/);
  45. putchar(a%+'');
  46. }
  47. const int N = ;
  48. typedef unsigned long long ull;
  49. const ull inf = (1ULL<<);
  50. int d[N];
  51. void init()
  52. {
  53. rep1(i,,N) d[i] = i - ;
  54. rep0(i,,N){
  55. for(int j = i;j < N;j += i)
  56. d[j]--;
  57. if(!d[d[i]]) d[d[i]] = i;
  58. d[i] = ;
  59. }
  60. //rep1(i,1,100)if(d[i] == 0){cout<<i<<" ";}
  61. }
  62. int p[] = {,,,,,,,,,,,,,,,};
  63. int n;
  64. ull ans;
  65. void dfs(int dept,ull val,int num,int last)
  66. {
  67. if(num > n || n%num) return ;
  68. if(num == n){
  69. ans = min(ans,val);
  70. return ;
  71. }
  72. for(int i = ;i <= last;i++){
  73. if(ans/p[dept] <= val) break;
  74. dfs(dept+,val *= p[dept],num*(i+),i);
  75. }
  76. }
  77. int main()
  78. {
  79. int kase = ,T,op;
  80. init();
  81. read1(T);
  82. while(T--){
  83. read2(op,n);
  84. if(op & ) ans = d[n];
  85. else{
  86. ans = inf + ;
  87. dfs(,,,);
  88. }
  89. printf("Case %d: ",kase++);
  90. if(ans > inf) puts("INF");
  91. else if(ans == ) puts("Illegal");
  92. else {out(ans);puts("");}
  93. }
  94. return ;
  95. }

hdu 4542 小明系列故事——未知剩余系的更多相关文章

  1. hdu 4542 小明系列故事——未知剩余系 反素数 + 打表

    小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Prob ...

  2. hdu 4542 "小明系列故事——未知剩余系" (反素数+DFS剪枝)

    传送门 参考资料: [1]:https://blog.csdn.net/acdreamers/article/details/25049767 题意: 输入两个数 type , k: ①type = ...

  3. HDU 4542 小明系列故事——未知剩余系 (数论|反素数)

    分析 kuangbin的blog已经讲的很好了,我做一点补充 1.当做x*y>z的比较时,如果x \(\ast\) y过大,可以写成x>z/y 2.分解质因数时选择用f[][0]保存质数, ...

  4. HDU4542 小明系列故事——未知剩余系

    大赞的数论题: 大致思路: 对于TYPE=1的情况,认为 X 中有 X-K个约数,求最小的X,X-K>0 那么化为B+K的约数为B, 我们知道(B+K)的约数<=2*SQRT(B+K);这 ...

  5. hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  6. HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  7. HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  8. HDU 4828 小明系列故事——捉迷藏

    漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others)    Memo ...

  9. HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)

    Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则:  1.如果小明 ...

随机推荐

  1. php验证字符串长度问题

    C:\Users\Administrator>php -r "echo strlen('你好')";4C:\Users\Administrator>php -r &qu ...

  2. mysql与java的之间的连接

    package cn.hncu; //注意,以下都是sun公司的接口(类)---这样以后换成Oracle等其它数据库,代码不用动import java.sql.Connection;import ja ...

  3. Android_Menu_PopupMenu

    layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...

  4. c++与c不太相同的一些地方2

    1.一般全局变量放到cpp 文件里面,而不是.h 里面.要不然容易乱套,这个乱几次就好了,先记住这样一种编码规范. 以为大家都引入就比较麻烦,但是实现起来就只有cpp里面才有.毕竟.h是要被包含的文件 ...

  5. Java系统程序员修炼之道

    一:Java语言学习 对线程(thread),串行化,反射,网络编程,JNI技术,容器(Map,List, Iterator), 类加载器 (ClassLoader),输入输出流,垃圾回收机制, 有比 ...

  6. #284 div.2 C.Crazy Town

    C. Crazy Town   Crazy Town is a plane on which there are n infinite line roads. Each road is defined ...

  7. svn has stoped working

    各种问各种搜  ,看来还得靠自己,,,,下面是解决方案; 如果你出现这种情况,  右键点击svn的选项,就弹出这个框框,,,,点击svn里的哪个选项都是弹出这个框框,,,,重新安装,重启,换各种版本安 ...

  8. HTTP和HTTPS详解

    http://blog.csdn.net/mingli198611/article/details/8055261/ 转自:http://www.cnblogs.com/ok-lanyan/archi ...

  9. PetaPoco更新记录方法

    /// <summary> /// Performs an SQL update /// </summary> /// <param name="tableNa ...

  10. oc 基础知识

    一.枚举 结构体 typedef enum{ sexMan, sexWoman }Sex;   tydedef struct{    int year;    int month;    int da ...