这条链依次乘一个因子。因为n<2^20,sqrt(n)分解因子,相同的因子相对顺序取一个。

组合公式计算一下就好。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string>
  4. #include<cstring>
  5. #include<queue>
  6. #include<vector>
  7. #include<stack>
  8. #include<vector>
  9. #include<map>
  10. #include<set>
  11. #include<algorithm>
  12. #include<cmath>
  13. //#include<bits/stdc++.h>
  14. using namespace std;
  15.  
  16. typedef long long ll;
  17. #define PB push_back
  18.  
  19. const int maxn = <<;
  20.  
  21. ll fac[];
  22. void calFac(int n = )
  23. {
  24. fac[] = ;
  25. for(int i = ; i <= n; i++){
  26. fac[i] = fac[i-]*i;
  27. }
  28. }
  29.  
  30. int primeDecompose(int n,ll &div)
  31. {
  32. int re = ; div = ;
  33.  
  34. for (int i = ; i*i <= n; i++){
  35. int cnt = ;
  36. while (n % i == ){
  37. n /= i;
  38. cnt++;
  39. re++;
  40. }
  41. if(cnt) div *= fac[cnt];
  42. }
  43. if(n>) re++;
  44. return re;
  45. }
  46.  
  47. //#define LOCAL
  48. int main()
  49. {
  50. #ifdef LOCAL
  51. freopen("in.txt","r",stdin);
  52. #endif
  53. calFac();
  54. int X;
  55. while(~scanf("%d",&X)){
  56. ll div;
  57. int len = primeDecompose(X,div);
  58. ll shc = fac[len]/div;
  59. printf("%d %I64d\n",len,shc);
  60. }
  61. return ;
  62. }

我尝试用预先筛sqrt(n)以内的素数来加速判断,结果却慢了26ms..

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string>
  4. #include<cstring>
  5. #include<queue>
  6. #include<vector>
  7. #include<stack>
  8. #include<vector>
  9. #include<map>
  10. #include<set>
  11. #include<algorithm>
  12. #include<cmath>
  13. //#include<bits/stdc++.h>
  14. using namespace std;
  15.  
  16. typedef long long ll;
  17. #define PB push_back
  18.  
  19. const int maxn = <<;
  20. const int sqrn = <<;//(int)sqrt(maxn+0.5); + 5
  21. const int PrmSz = (<<)+; // (sqrn>>2) + 5
  22.  
  23. bool isNot[sqrn];
  24. int Prm[PrmSz], tot;
  25.  
  26. void seive(int n = sqrn) //sqrt(sqrt(maxn))
  27. {
  28. int m = sqrt(n+0.5);
  29. isNot[] = isNot[] = true;
  30. for(int i = ; i <= m; i++){
  31. if(!isNot[i])
  32. for(int j = i*i; j <= n; j += i){
  33. isNot[j] = true;
  34. }
  35. }
  36. for(int i = ; i <= n; i++){
  37. if(!isNot[i]) //Prm.PB(i);
  38. Prm[tot++] = i;
  39. }
  40. }
  41.  
  42. ll fac[];
  43. void calFac(int n = )
  44. {
  45. fac[] = ;
  46. for(int i = ; i <= n; i++){
  47. fac[i] = fac[i-]*i;
  48. }
  49. }
  50.  
  51. inline int primeDecompose(int n,ll &div)
  52. {
  53. int re = ; div = ;
  54. for (int i = ; i < tot && Prm[i] <= n; i++){
  55. int p = Prm[i], cnt = ;
  56. while (n % p == ){
  57. n /= p;
  58. cnt++;
  59. re++;
  60. }
  61. if(cnt) div *= fac[cnt];
  62. }
  63. if(n>) re++;
  64. return re;
  65. }
  66.  
  67. //#define LOCAL
  68. int main()
  69. {
  70. #ifdef LOCAL
  71. freopen("in.txt","r",stdin);
  72. #endif
  73. seive();
  74. calFac();
  75. int X;
  76. while(~scanf("%d",&X)){
  77. ll div;
  78. int len = primeDecompose(X,div);
  79. ll shc = fac[len]/div;
  80. printf("%d %I64d\n",len,shc);
  81. }
  82. return ;
  83. }

POJ 3421 X-factor Chains(构造)的更多相关文章

  1. poj 3421 X-factor Chains——质因数分解

    题目:http://poj.org/problem?id=3421 记忆化搜索竟然水过去了.仔细一想时间可能有点不对,但还是水过去了. #include<iostream> #includ ...

  2. POJ 3421 X-factor Chains

    线型素数筛+质因素分解+组合数. AC后发现这样做效率有点低..766ms. #include<stdio.h> #include<string.h> #include< ...

  3. Mathematics:X-factor Chains(POJ 3421)

    X链条 题目大意,从1到N,1 = X0, X1, X2, …, Xm = X中间可以分成很多数,另Xi < Xi+1 Xi 可以整除Xi+1 ,求最大长度m和m长度的链有多少条 思路: 很简单 ...

  4. POJ 3421 X-factor Chains (因式分解+排列组合)

    题意:一条整数链,要求相邻两数前一个整除后一个.给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量. 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以 ...

  5. POJ 3421 X-factor Chains | 数论

    题意: 给一个x,求最长的排列满足开头是1,结尾是x,前一个数是后一个数的因子 输出长度和这样序列的个数 题解: 把x分解质因数,质因数个数就是答案,接下来考虑怎么求个数 显然这是一个可重集合全排列问 ...

  6. POJ 3421分解质因数

    X-factor Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7375   Accepted: 2340 D ...

  7. POJ 3421

    X-factor Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5111   Accepted: 1622 D ...

  8. POJ 1776 Task Sequences(竞赛图构造哈密顿通路)

    链接:http://poj.org/problem?id=1776 本文链接:http://www.cnblogs.com/Ash-ly/p/5458635.html 题意: 有一个机器要完成一个作业 ...

  9. POJ 3233 Matrix Power Series(构造矩阵求等比)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...

随机推荐

  1. AIM Tech Round 5 (rated, Div. 1 + Div. 2) D(SET,思维)

    #include<bits/stdc++.h>using namespace std;const long long mod = 1e9+7;char s[370007][27];long ...

  2. 2018CCPC网络赛A(优先队列,思维)

    #include<bits/stdc++.h>using namespace std;priority_queue<pair<int,int>>q;int main ...

  3. CodeForces 114B 【STL应用】

    思路: 原来string类能sort 和 swap....太强了.... 注意:字典序最小输出,因为某个地方写挫了,sort了n发,代码挫. #include <bits/stdc++.h> ...

  4. [Django笔记] Apache + mod-wsgi 环境部署所遇到的各种问题总结

    在一台CentOS7机器上配置Django+apache运行环境 Django安装 python2 or python3 ? 一般情况下Linux系统都有自带python2,本机CentOS7上的是p ...

  5. 799C(xjb)

    题目链接: http://codeforces.com/problemset/problem/799/C 题意: 有c, d两种货币, 有 n 个货物, 可以用 c 货币或者 d 货币购买, 现在需要 ...

  6. python web开发之flask框架学习(1) 创建flask项目

    python 开发越来越火,作为菜鸟,也应该学习一下,感觉还可以,记录下来,方便学习参考. 不管做什么开发首先肯定是安装环境,这里我用的是pycharm,python3.如果不清楚怎么安装环境可以去网 ...

  7. List、Set

    List.Set List.Set List.Set List.Set List.Set List.Set List.Set

  8. 理解js继承的6种方式

    想要继承,就必须要提供个父类(继承谁,提供继承的属性) 一.原型链继承 重点:让新实例的原型等于父类的实例. 特点:1.实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性.(新 ...

  9. git 脚本

    echo $PWD message=$1 content='.' if [ ! -n "$1" ] ;then message=`date` message=$message' 推 ...

  10. (反NIM)

    题目大意是和普通的NIM游戏一样,但是却是取到最后一个是输的,天真的以为就是反过来,其实并不是这样的 结论 先手必胜的条件为 ①:所有堆的石子数均=1,且有偶数堆. ②:至少有一个堆的石子数>1 ...