题目描述

输入正整数 x,求 x 的大于 1 的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的序列的个数。

输入

多组数据,每组数据一行,包含一个正整数 x。

对于全部数据,1≤x≤220。

输出

对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。

样例输入

2

3

4

10

100

样例输出

1 1

1 1

2 1

2 2

4 6


这道题虽然是“约数”的练习,但其实我一开始一点关于约数的思路都没,后来去网上看别人的题解,然鹅基本上都是肥肠简单的一笔带过(类似“不难得到”“易得”之类的话),直接得出“序列的最大长度即x的质因子的总个数,而满足最大长度的序列的个数即x的所有质因子的全排列数”的结论,对于我这样的蒟蒻来说太不友善惹,我都看得一脸懵逼o((⊙﹏⊙))o

后来终于找到了这位大佬的题解↓↓↓,写的真是思路清晰,让我一下子恍然大悟。

点击进入大佬的博客

简要分析下这道题的题意:要使这个序列中的前一项都能整除后一项,即前一项必须是后一项的因子。我们设前一项为a,后一项为a*n,那么要使这个序列尽可能的长,就要让n尽可能的小,小到不能再进行分解,(假如n可以分解,即n=p*q,且p、q都不等于1,那一定可以让这个序列变成更长的a,a*p,a*p*q,那么就不符题意了),那显然n不就是质数嘛,而a可以乘的n的个数就是我们要求的序列的最大长度。所以我们就可以将给定的x分解质因数,统计x一共有多少个质因子(我这里记为ans)。

其实完全可以将这个最长序列的每一项都看成是它的前一项所乘的质数(第一项的前一项可看作是1),那么这样,满足最大长度的序列个数,就是这些质数的不同排列方式的个数,即组合数学当中的“不全相异元素的排列”。所以排列数公式为:ans!/(c1!+c2!......+ck!)

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=;
int c[];
ll f[N];
ll fac(ll x)
{
if(f[x])return f[x];//记忆化搜索
f[x]=x*fac(x-);
return f[x];
}
int main()
{
ll x;f[]=;
while(~scanf("%lld",&x))
{
ll cnt=,ans=;//每次都要更新
memset(c,,sizeof(c));
ll n=x;
for(ll i=;i*i<=x;i++)
{
if(n%i==)
{
cnt++;//cnt存x可分解出的质因子的种数
while(n%i==)
{
n/=i;
c[cnt]++;//第几种质因子在x里出现的个数
ans++;//ans指x里一共有多少个质因子
}
}
}
if(n>)//如果还有一个大于sqrt(n)的质数
{
c[++cnt]++;
ans++;
}
printf("%lld ",ans);
ll nn=fac(ans);//nn=ans!
for(int i=;i<=cnt;i++)
nn/=fac(c[i]);
printf("%lld\n",nn);
}
return ;
}

详情请展开代码

现在觉得其实很简单的鸭,没有一点技巧,真搞不懂我之前居然没理解,看来是脑子没转过弯来。果然写一遍题解还是有点用的

X-factor Chain(信息学奥赛一本通 1628)的更多相关文章

  1. $ybt\ 【信息学奥赛一本通】题解目录$

    [信息学奥赛一本通]题解目录 $ \large -> OJ$ $ problem1000 $ \(Answer\) - > $ \large 1000$ $ problem1001 $ \ ...

  2. 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目

    目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...

  3. 【信息学奥赛一本通】第三部分_队列 ex2_3produce 产生数

    给出一个整数n(n<=2000)(代码可适用n<=10^31)和k个变换规则(k<=15). 规则:1.1个数字可以变换成另1个数字: 2.规则中右边的数字不能为零. BFS #in ...

  4. 信息学奥赛一本通算法(C++版)基础算法:高精度计算

    高精度加法(大位相加) #include <bits/stdc++.h> using namespace std; int main() { ],b1[]; ],b[],c[];//a,b ...

  5. 食物链【NOI2001】(信息学奥赛一本通 1390)

    [题目描述] 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种 ...

  6. Biorhythms(信息学奥赛一本通 1639)

    题目描述: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏 ...

  7. 信息学奥赛一本通 提高篇 序列第k个数 及 快速幂

    我是传送门 这个题首先是先判断是等差还是等比数列 等差的话非常简单: 前后两个数是等差的,举个栗子: 3 6 9 12 这几个数,(我感觉 1 2 3 4并说明不了什么) 每次都加3嘛,很容易看出,第 ...

  8. 【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)

    题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...

  9. 【09NOIP提高组】Hankson 的趣味题(信息学奥赛一本通 1856)(洛谷 1072)

    题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考一个有趣的问题.今天在课堂上,老师讲解了如何求 ...

随机推荐

  1. C# Linq 使用总结

    隐式类型匿名类型自动属性初始化器委托泛型泛型委托匿名方法Lambda表达式扩展方法迭代器LINQ System.Linq var arr = new[] { "c", " ...

  2. C++:构造函数

    问题提出 默认初始化 答案 ▶问题提出 主要是在VC++ 2015里经常提示莫名其妙的编译错误. 分析一下,为什么Java里构造函数这个问题很简单: 1. C++里对象类型不止有按引用传递,还可能拷贝 ...

  3. 利用Properties属性集结合类加载器读取配置文件

    配置文件test.properties a=123 测试类Demo1.java public class Demo1 { public static void main(String[] args) ...

  4. spark任务在executor端的运行过程分析

    CoarseGrainedExecutorBackend 上一篇,我们主要分析了一次作业的提交过程,严格说是在driver端的过程,作业提交之后经过DAGScheduler根据shuffle依赖关系划 ...

  5. 【转载】C#通过InsertAt方法在DataTable特定位置插入一条数据

    在C#中的Datatable数据变量的操作过程中,可以通过DataTable变量的Rows属性的InsertAt方法往DataTable的指定位置行数位置插入一个新行数据,即往DataTable表格指 ...

  6. BeanPostProcessor后置处理器原理以及ApplicationListener原理

    BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的 1.BeanFactoryPostProcessor:BeanFactory的后置处理器; 在Bean ...

  7. Cheat Engine 特征码

    打开游戏 引用自动注入 搜索特征码 特征码,是游戏运行中,唯一的汇编代码 验证,特征码是游戏中唯一代码 添加特征码 添加特征码,以及金钱只增不减代码 进行激活测试 特征码,只有在游戏过程中才会执行到 ...

  8. 你与BAT只差这一套面试题

    1.Linux如何挂载windows下的共享目录?mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456l ...

  9. C# 如何提前结束 Sleep ?

    好久没有更新博客了,都有点对不起这个账号了.这次跟大家分享的是一种编程思路,没什么技术含量,但也许能帮得到你. 我们经常会在程序程序中用到 Sleep 这个方法.Sleep 方法用起来非常简单,但是有 ...

  10. git使用.gitignore文件忽略相关文件上传

    在使用git时,有些文件是不需要上传到仓库中的,比如idea/eclipse相关的文件,编译后的文件(target目录)等. 可以使用.gitignore文件进行配置.在git本地仓库创建.gitig ...