分解质因数 Love The Way You Lie 2022-10-22 04:12 213阅读 0赞 **上一篇博客:[质数的筛法][Link 1]** > 写在前面:大家好!我是`AC-fun`,我的昵称来自两个单词`Accepted`和`fun`。我是一个热爱ACM的蒟蒻。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:[https://ac-fun.blog.csdn.net/][https_ac-fun.blog.csdn.net]。非常感谢大家的支持。一起加油,冲鸭! > `用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง` ### 文章目录 ### * 算数基本定理 * 分解质因数 * 优化方法 * 例题 * * 题目描述 * * 输入格式 * 输出格式 * 数据范围 * 输入样例 * 输出样例 * 题解 * * 解题代码 # 算数基本定理 # 在上一篇博客 [质数的筛法][Link 1] 中提到过算数基本定理。`算数基本定理` 也叫 `唯一分解定理`,主要的内容为:任何大于 **1** 的正整数都能 唯一 的分解为有限个质数的乘积。根据这一定理任何一个合数都可以被分解成几个质数相乘的形式。 # 分解质因数 # 把一个合数用质因数相乘的形式表示出来,叫做分解质因数。分解质因数可以使用 **试除法** 来分解,即从小到大枚举每一个数 **d**,如果 **d** 可以整除 **n**,则从 **n** 中除掉所有的因子 **d**,同时累计除去 **d** 的个数。通过唯一分解定理,可以知道一个合数的因子一定在扫描到这个合数之前就被其更小的质因子 **d** 除掉了,所以能整除 **n** 的一定是质数。 # 优化方法 # 通过分析可以得到一个合数 **n** 只可能有一个大于 n \\sqrt\{n\} n 的质因子,因为如果有两个的话,那么这两个质因子的乘积一定是大于 **n** 的。所以只需要从小到大枚举到 n \\sqrt\{n\} n ,最后判断 **n** 是否大于 **1** 即可,如果最后 **n > 1** 说明有一个大于 n \\sqrt\{n\} n 的质因子,那么将其输出即可,否则说明 **n** 已经被除尽,所有的质因子都已经求出。 # 例题 # ## 题目描述 ## 给定 **n** 个正整数 **ai**,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 ### 输入格式 ### 第一行包含整数 **n**。 接下来 **n** 行,每行包含一个正整数 **ai**。 ### 输出格式 ### 对于每个正整数 **ai**,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。 每个正整数的质因数全部输出完毕后,输出一个空行。 ### 数据范围 ### **1 ≤ n ≤ 100,** **1 ≤ ai ≤ 2 × 109** ### 输入样例 ### > **2 > 6 > 8** ### 输出样例 ### > **2 1 > 3 1** > > **2 3** **原题链接:[AcWing 867. 分解质因数][AcWing 867.]** ## 题解 ## ### 解题代码 ### #include<iostream> #include<algorithm> using namespace std; void divide(int n) { for (int i = 2; i <= n / i; i++) { if (n % i == 0) { int s = 0; while (n % i == 0) { n /= i; s++; } cout << i << ' ' << s << endl; } } if (n > 1) cout << n << ' ' << 1 << endl; puts(""); } int main() { int n; cin >> n; while (n--) { int x; cin >> x; divide(x); } return 0; } -------------------- > 未完待续,持续更新中…… > ![20210326120556284.png][] [Link 1]: https://ac-fun.blog.csdn.net/article/details/115395048 [https_ac-fun.blog.csdn.net]: https://ac-fun.blog.csdn.net/ [AcWing 867.]: https://www.acwing.com/problem/content/869/ [20210326120556284.png]: /images/20221022/e71b05d6692e4e5c94173571f7f9a0dc.png
相关 分解质因数 原理: ![13dda8e0e0e5492ea0a2a4912d8f48d8.png][] 做法: 按照枚举约数的做法去枚举质因子,在枚举到质因子的倍数之前先枚举到质因子 àì夳堔傛蜴生んèń/ 2024年03月30日 09:12/ 0 赞/ 30 阅读
相关 质因数分解 一道清华的复试题,我先后看了两份代码,收获匪浅,分别摘自下面两个博客: [https://blog.csdn.net/Little\_Kid\_Kang/article/de 深藏阁楼爱情的钟/ 2023年03月14日 05:54/ 0 赞/ 142 阅读
相关 分解质因数 上一篇博客:[质数的筛法][Link 1] > 写在前面:大家好!我是`AC-fun`,我的昵称来自两个单词`Accepted`和`fun`。我是一个热爱ACM的蒟蒻。如果 Love The Way You Lie/ 2022年10月22日 04:12/ 0 赞/ 214 阅读
相关 分解质因数 public class DecomposePrimeFactor \{ public final static int NUM = 154; public static vo Dear 丶/ 2022年09月30日 06:22/ 0 赞/ 208 阅读
相关 分解质因数 问题描述 求出区间\[a,b\]中所有整数的质因数分解。 输入格式 输入两个整数a,b。 输出格式 每行输出一个数的分解,形如k=a1\a2\a3...( 超、凢脫俗/ 2022年08月05日 02:54/ 0 赞/ 243 阅读
相关 分解质因数 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。 灰太狼/ 2022年07月03日 18:20/ 0 赞/ 240 阅读
相关 分解质因数 分解质因数 当无法分解是输出“no answer” <table style="font-size:12px; color:rgb(51,51,51); line-heig 淩亂°似流年/ 2022年06月06日 11:42/ 0 赞/ 264 阅读
相关 分解质因数 问题描述 求出区间\[a,b\]中所有整数的质因数分解。 输入格式 输入两个整数a,b。 输出格式 每行输出一个数的分解,形如k=a1\a2\a3...( 电玩女神/ 2022年06月01日 13:52/ 0 赞/ 272 阅读
相关 分解质因数 void solution(int num) { int i = 2; while (num != 1) { i ╰半夏微凉°/ 2022年05月09日 01:46/ 0 赞/ 302 阅读
还没有评论,来说两句吧...