vjudge 上题目链接:uva 11728

  其实是个数论水题,直接打表就行:

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4.  
  5. int ans[];
  6. inline void init(int n = ) {
  7. for(int i = ; i <= n; ++i) {
  8. int sum = ;
  9. for(int j = ; j <= i; ++j)
  10. if(i % j == ) sum += j;
  11. if(sum <= ) ans[sum] = i;
  12. }
  13. }
  14.  
  15. int main() {
  16. int s,Case = ;
  17. init();
  18. while(~scanf("%d",&s),s)
  19. printf("Case %d: %d\n",++Case, !ans[s]? -: ans[s]);
  20. return ;
  21. }

  可我一开始却杀鸡用了牛刀,想得超复杂,就因为大白书上提示"唯一分解定理,回溯"什么的,于是我就按着这样的思路去做了,结果写得超复杂,感觉过了也没有任何意义了。。。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<vector>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. bool vis[];
  8. int pri[];
  9. inline int init_pri(int n = ) {
  10. int c = ;
  11. for(int i = ; i <= n; ++i)
  12. if(!vis[i]) {
  13. pri[++c] = i;
  14. for(int j = i << ; j <= n; j += i) vis[j] = ;
  15. }
  16. return c;
  17. }
  18.  
  19. struct node {
  20. int sum, p, r, pow;
  21. node() {}
  22. node(int sum, int p, int r, int pow): sum(sum), p(p), r(r), pow(pow) {}
  23. bool operator < (const node & n2) const {
  24. if(sum == n2.sum) return p < n2.p;
  25. return sum < n2.sum;
  26. }
  27. void print() const {
  28. printf("sum = %d p = %d r = %d pow = %d\n",sum,p,r,pow);
  29. }
  30. };
  31.  
  32. vector<node> fac;
  33.  
  34. inline void init() {
  35. init_pri();
  36. for(int i = ; pri[i] <= ; ++i) {
  37. int sum = , mul = , len = ;
  38. while(sum <= ) {
  39. mul *= pri[i];
  40. sum += mul;
  41. if(sum > ) break;
  42. fac.push_back(node(sum, pri[i], ++len, mul));
  43. }
  44. }
  45. sort(fac.begin(), fac.end());
  46. }
  47.  
  48. int find(const vector<node> &c, int low, int up, int x) {
  49. int mid;
  50. while(low <= up) {
  51. mid = low + up >> ;
  52. if(c[mid].sum == x) return mid;
  53. else if(x < c[mid].sum) up = mid - ;
  54. else low = mid + ;
  55. }
  56. return low;
  57. }
  58.  
  59. int ans;
  60. bool sign[];
  61.  
  62. void dfs(int s, int id, int n) {
  63. if(s == ) {
  64. if(n > ans) ans = n;
  65. return ;
  66. }
  67. if(s <= || id < ) return ;
  68. if(!sign[fac[id].p] && s % fac[id].sum == ) {
  69. sign[fac[id].p] = ;
  70. dfs(s / fac[id].sum, id - , n * fac[id].pow);
  71. sign[fac[id].p] = ;
  72. }
  73. dfs(s, id - , n);
  74. }
  75.  
  76. int main() {
  77. int s, Case = ;
  78. init();
  79. while(~scanf("%d",&s), s) {
  80. printf("Case %d: ",++Case);
  81. if(s == ) {
  82. puts("");
  83. continue;
  84. }
  85. if(s == ) {
  86. puts("-1");
  87. continue;
  88. }
  89. ans = -;
  90. int id = find(fac, , fac.size() - , s);
  91. if(fac[id].sum > s) --id;
  92. memset(sign, , sizeof(sign));
  93. dfs(s, id, );
  94. printf("%d\n",ans);
  95. }
  96. return ;
  97. }

uva 11728 Alternate Task的更多相关文章

  1. uva 11728 - Alternate Task(数论)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/36409469 option=com_onli ...

  2. UVA 11728 - Alternate Task (数论)

    Uva 11728 - Alternate Task 题目链接 题意:给定一个因子和.求出相应是哪个数字 思路:数字不可能大于因子和,对于每一个数字去算出因子和,然后记录下来就可以 代码: #incl ...

  3. UVA 11728 - Alternate Task 数学

    Little Hasan loves to play number games with his friends. One day they were playing a game whereone ...

  4. 【数论,水题】UVa 11728 - Alternate Task

    题目链接 题意:给出一个数S,求一个最大的数,使这个数所有的因子之和为S; 这个所谓“因子之和”不知道有没有误导性,因为一开始以为得是素数才行.后来复习了下小学数学,比如12的因子分别是1,2,3,4 ...

  5. UVa 11728 Alternate Task (枚举)

    题意:给定一个 n,求一个最大正整数 N 使得 N 的所有正因数和等于 n. 析:对于任何数一个 n,它的所有正因子都是大于等于本身的,因为 n 本身就是自己的正因数,这样的就可以直接暴力了,答案肯定 ...

  6. Alternate Task UVA - 11728 (暴力。。分解质因子)

    题意: 输入一个正整数S,(S  <= 1000)求一个最大的正整数N,使得N的所有正因子之和为S. 解析: ..求1000以内的所有数的正因子和 ...输出.. #include <io ...

  7. 10. Tasks and functions

    Frm: IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language 10. Tasks and functio ...

  8. 二分图最大匹配(匈牙利算法) UVA 670 The dog task

    题目传送门 /* 题意:bob按照指定顺序行走,他的狗可以在他到达下一个点之前到一个景点并及时返回,问狗最多能走多少个景点 匈牙利算法:按照狗能否顺利到一个景点分为两个集合,套个模板 */ #incl ...

  9. UVA 10795 A Different Task(汉诺塔 递归))

    A Different Task The (Three peg) Tower of Hanoi problem is a popular one in computer science. Briefl ...

随机推荐

  1. java 1G大文件复制

    对比几种复制方法 复制的文件是980m的txt文件 1.  FileChannel 方法 代码: public static void mappedBuffer() throws IOExceptio ...

  2. 实现Fragment的切换和ViewPager自动循环设置切换时间

    1.FragmentActivity与Fragment之间的用法 2.实现ViewPager自动轮换,设置移动的时间 通过反射获取mScrooler这个对象: Field mScroller; mSc ...

  3. Flip Game 分类: POJ 2015-06-15 14:59 22人阅读 评论(0) 收藏

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33519   Accepted: 14642 Descr ...

  4. Animator组件关闭再打开后参数丢失问题

    问题如下,因为再激活Animator时,它会重置一次,参数也会丢失 这个问题一直存在,论坛给出的解释是把参数缓存下来,在激活时重置 http://answers.unity3d.com/questio ...

  5. Thinkphp3.2.3如何加载自定义函数库

    方法一:将自定义函数库放在Common文件夹下的Common文件夹下,命名为function.php. 方法二:项目配置文件中定义LOAD_EXT_FILE参数.这个方法在3.1的开发手册中有. 参考 ...

  6. CSU 1325: A very hard problem 中南月赛的一道题。

    1325: A very hard problem Time Limit: 3 Sec  Memory Limit: 160 MBSubmit: 203  Solved: 53[Submit][Sta ...

  7. Linux用户应知应会的7个‘ls’命令的独特技巧

    在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容.本文时‘ls命令’系列的最后一部分.如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接. Linux中的15个基本 ...

  8. php cookie详解

    各参数详解 注意: 1   当一个Cookie被删除时,它的值在当前页在仍然有效的.原因是删除cookie实际也是设置cookie,  只是把cookie的值设为‘’或者null,或者把cookie的 ...

  9. FreeSWITCH 1.6关于视频通话的一些测试

    简单的测试了一下,暂时没把精力放到这一块. ① 视频编码透传的设置(使用代理模式). 修改internal.xml文件的以下参数: <param name="inbound-proxy ...

  10. How to: Update an .edmx File when the Database Changes

    https://msdn.microsoft.com/en-us/library/cc716697.aspx In the Model Browser, right-click the .edmx f ...