题意:

给一个x,求最长的排列满足开头是1,结尾是x,前一个数是后一个数的因子

输出长度和这样序列的个数


题解:

把x分解质因数,质因数个数就是答案,接下来考虑怎么求个数

显然这是一个可重集合全排列问题,设有n个元素

答案就是n!/每个元素出现次数的阶乘

 #include<cstdio>
#include<algorithm>
#include<cstring>
typedef long long ll;
#define N 2000
using namespace std;
int prime[N],n,cnt[N],pcnt,sum;
ll jc[];
bool isp[N];
void init()
{
memset(isp,,sizeof(isp));
isp[]=;
for (int i=;i<N;i++)
{
if (isp[i]==)
prime[++pcnt]=i;
for (int j=;j<=pcnt && i*prime[j]<N;j++)
{
isp[i*prime[j]]=;
if (i%prime[j]==) break;
}
}
}
int main()
{
jc[]=;
for (int i=;i<=;i++)
jc[i]=jc[i-]*i;
init();
while (scanf("%d",&n)!=EOF)
{
ll ans=;
memset(cnt,,sizeof(cnt));
sum=;
for (int i=;i<=pcnt;i++)
{
if (n==) break;
while (n%prime[i]==)
n/=prime[i],cnt[i]++,sum++;
}
if (n>)
sum++;
ans=jc[sum];
for (int i=;i<=pcnt;i++)
ans/=jc[cnt[i]];
printf("%d %lld\n",sum,ans);
}
return ;
}

最新文章

  1. Android网络编程1
  2. &quot;\r\n&quot;,&quot;\r&quot;,&quot;\n&quot;
  3. 【BZOJ 2157】旅游
  4. weblogic sockets 和 thread 问题解决
  5. 重学STM32---(六)DAC+DMA+TIM
  6. .NET程序与CA对接一直提示重定向
  7. SQL中and与or优先级比较
  8. Context
  9. Oracle SQL Lesson (9) - 操作数据(增删改)
  10. What skills are needed for machine learning jobs
  11. CDockablePane 关闭的问题
  12. mysql授权远程用户连接(权限最小化原则)
  13. 初学Python之 字符串 索引 分片
  14. XAMARIN 安卓程序闪退问题
  15. javaScript判断手机型号
  16. paiza
  17. Docker 部署Django项目
  18. 【POI每日题解 #5】 DWU-Double-row
  19. Telnet Protocol Specification
  20. hibernate 多对一(级联)操作

热门文章

  1. JavaScript的变量命名规则和关键字的介绍
  2. LeetCode-177:第N高的薪水
  3. Struts2基础入门
  4. mac安装mysql及workbench
  5. VS2013使用自带的数据库 Microsoft SQL Server 2012 Express LocalDB
  6. Javascript简单特效及摘要
  7. python--Pandas(一)
  8. 详解JavaScript中的arc的方法
  9. git 代码托管使用方法
  10. 6 Django的视图层