Description
    给定一个正整数X, 一个长度为m的X-因子链是由m+1个整数组成的。其中
    1 = X0, X1, X2, …, Xm = X 满足Xi < Xi+1 且 Xi 整除 Xi+1 。
    现在要求X-因子链的最大长度和最大长度有多少条?
Input
    多组数据,每一组数据一个正整数X (X ≤ 220).
Output
    对于每组数据,输出X-因子链的最大长度和最大长度有多少条
Sample Input
    2
    3
    4
    10
    100
Sample Output
    1 1
    1 1
    2 1
    2 2
    4 6
Analysis

1.子链的长度就是分解质因数后每个质因数个数的和。为什么?如果出现一个合数,必定可以再分解使子链加长。

2.剩下的工作就是dfs,注意每一步只能选泽一种质数去分解。分解到1记一个贡献

Code

 #include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define RG register int
#define rep(i,a,b) for(RG i=a;i<=b;++i)
#define per(i,a,b) for(RG i=a;i>=b;--i)
#define ll long long
#define inf (1<<29)
#define maxn 1048580
#define lim 1048578
using namespace std;
int n,cnt,pt,ans,ans1;
int isp[maxn],p[maxn];
int num[maxn][];
inline int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void pre()
{
rep(i,,lim)
{
if(!isp[i]) p[++cnt]=i;
for(RG j=;j<=cnt&&p[j]*i<=lim;j++)
{
isp[i*p[j]]=;
if(!(i%p[j])) break;
}
}
} void work()
{
int res=n;
rep(i,,cnt)
{
if(!(res%p[i])){
num[++pt][]=p[i],num[pt][]=;
while(!(res%p[i])) ++num[pt][],res/=p[i],++ans1;
}
if(res==) break;
}
} void dfs(int res)
{
if(res==){ans++;return;}
for(int i=;i<=pt;i++)
{
if(num[i][])
{
num[i][]--;
dfs(res/num[i][]);
num[i][]++;
}
}
} int main()
{
pre();
while(~scanf("%d",&n))
{
pt=ans=ans1=;
work();
dfs(n);
printf("%d %d\n",ans1,ans);
}
return ;
}

最新文章

  1. docker open files的设置
  2. HTTP 详解一 -- 转
  3. WWDC2015
  4. ORACLE EXP-00011:表不存在的分析和解决方案
  5. .net中div置于顶层+iframe
  6. Razor Generator 将cshtml自动生成对应的CS文件
  7. .net 2.0 后台多线程
  8. 【LCA求最近公共祖先+vector构图】Distance Queries
  9. git 回退各种场景操作
  10. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期
  11. [转]搭建Hadoop伪分布式环境
  12. el表达式原样输出,不被解析
  13. LeetCode——5.Longest Palindromic Substring
  14. hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)
  15. Execution Plan 执行计划介绍
  16. 开源3D软件——大集合【转】
  17. Spark分析之Standalone运行过程分析
  18. 利用backtrace和backtrace_symbols函数打印调用栈信息
  19. NOIP 马拦过河卒
  20. codevs 2800 送外卖 TSP问题

热门文章

  1. mybatis 遍历map;
  2. Windows Server 2008/2012 计划任务配置执行bat
  3. mysql的时间戳timestamp精确到小数点后六位
  4. Zabbix监控——Zabbix自定义用户参数制作监控项
  5. [转] 对Array.prototype.slice.call()方法的理解
  6. Principles and strategies for mathematics study
  7. NEST 之旅 &#183; 开启
  8. WebAPI——自动生成帮助文档
  9. web前端中navigator
  10. JDK5的新特性之可变参数&amp;Arrays.asList()方法