X-factor Chain(信息学奥赛一本通 1628)
题目描述
输入正整数 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)的更多相关文章
- $ybt\ 【信息学奥赛一本通】题解目录$
		
[信息学奥赛一本通]题解目录 $ \large -> OJ$ $ problem1000 $ \(Answer\) - > $ \large 1000$ $ problem1001 $ \ ...
 - 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目
		
目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...
 - 【信息学奥赛一本通】第三部分_队列 ex2_3produce 产生数
		
给出一个整数n(n<=2000)(代码可适用n<=10^31)和k个变换规则(k<=15). 规则:1.1个数字可以变换成另1个数字: 2.规则中右边的数字不能为零. BFS #in ...
 - 信息学奥赛一本通算法(C++版)基础算法:高精度计算
		
高精度加法(大位相加) #include <bits/stdc++.h> using namespace std; int main() { ],b1[]; ],b[],c[];//a,b ...
 - 食物链【NOI2001】(信息学奥赛一本通 1390)
		
[题目描述] 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种 ...
 - Biorhythms(信息学奥赛一本通 1639)
		
题目描述: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏 ...
 - 信息学奥赛一本通 提高篇 序列第k个数 及 快速幂
		
我是传送门 这个题首先是先判断是等差还是等比数列 等差的话非常简单: 前后两个数是等差的,举个栗子: 3 6 9 12 这几个数,(我感觉 1 2 3 4并说明不了什么) 每次都加3嘛,很容易看出,第 ...
 - 【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)
		
题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...
 - 【09NOIP提高组】Hankson 的趣味题(信息学奥赛一本通 1856)(洛谷 1072)
		
题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考一个有趣的问题.今天在课堂上,老师讲解了如何求 ...
 
随机推荐
- 2019 盛天网络java面试笔试题 (含面试题解析)
			
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.盛天网络等公司offer,岗位是Java后端开发,因为发展原因最终选择去了盛天网络,入职一年时间了,也成为了面 ...
 - html5单词
			
< meta charset = " UTF-8 " > 国内编码 (meta-标签用来描述一个HTML网页文档的属性 charset-字 ...
 - idea在maven中引入了jar包依赖,但是编译过程中报出XXX程序包不存在,已解决
			
idea在maven中引入了jar包依赖,但是编译过程中报出XXX程序包不存在 1. 报错具体情况 2. Project Structure中的Libraries没有任何红色波浪线 3. 发现自己要引 ...
 - 【GitHub】源代码管理工具初识
			
软件工程综合实践第四次个人作业 作业要求:通过搜索资料和自学,了解源代码管理工具——GitHub 前言: GitHub,读音 /git·hʌb/ ,让社会化编程成为现实,其于2018年6月4日被微软收 ...
 - Sql 语句中 IN 和 EXISTS 的区别
			
IN 语句:只执行一次 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选.所以相对内表比较小的时候,in的速度较快 ...
 - Shell 编程 循环语句
			
本篇主要写一些shell脚本循环语句的使用. for 循环 指定次数 #!/bin/bash for ((i=1;i<=10;i++)) do echo $i done [root@localh ...
 - Shell 编程 基础
			
本篇主要写一些shell脚本的基础知识,编程规范. 第一个shell脚本 [root@localhost ~]# vim first.sh #!/bin/bash # This is first Sh ...
 - Django 之restfromwork 序列化组件实现数据增删查改
			
rest-framework序列化之Serializer models.py from django.db import models # Create your models here. class ...
 - 【解决】Error: ENOSPC: no space left on device, watch
			
发现问题: 启动 node 项目ReactNative时候出现报错Error: ENOSPC: no space left on device, watch [root@iz2zeihk6kfcls5 ...
 - jenkiins 配置邮件发送(四)
			
一.默认邮件配置的方法 Jenkins默认的插件只能发送执行失败的job 系统管理-->系统设置-->邮件通知 需要注意的是系统管理员邮箱地址必须要邮箱通知的邮箱一致,否则不会发送成功 在 ...