C++ 数论-质因数分解
来源:互联网 发布:商家联盟管理系统源码 编辑:程序博客网 时间:2024/06/07 02:38
质因数分解:把任意正整数分解成若干质数的乘积.
【例子】
6 = 2 * 3;
12 = 2 * 2 * 3;
18 = 2 * 3 * 3;
20 = 2 * 2 * 5;
100 = 2 * 2 * 5 * 5;
210 = 2 * 3 * 5 * 7;
......
【解法】从2开始,不能整除就+1
以20为例子.
先除以2,得到10;
再除以2,得到5;
5不能把2整除,2变为3
5不能把3整除,3变为4
5不能把4整除,5变为5;
除以5,得到1;结束;
打印一个数分解后的质因数表:
【Code1】O(n)的算法
int p[100010], sz; //表 & 大小
void Decom(int n) {for(int i=2; i<=n; i++) {if(n == 1) break; while(n % i == 0) {p[++sz] = i;n /= i;}}}
【Code2】O(sqrt(n))的算法
void Decom2(int n) {for(int i=2; i<=sqrt(n); i++) {if(n == 1) break;while(n % i == 0) {p[++sz] = i;n /= i;}}if(n != 1) p[++sz] = n; //当n是质数时 无法分解 }
【Code3】写成唯一分解定理-幂的形式
唯一分解定理:
如:48 = 2^4 * 3
int p[100010], c[100010], sz; //表 & 幂 & 大小
void Decom3(int n) {for(int i=2; i<=n; i++) {if(n % i == 0) {p[++sz] = i;while(n % i == 0) {c[sz] ++;n /= i;}}}}
@
阅读全文
0 0
- [数论/质因数分解] 细胞分裂
- 数论 - 质因数分解
- C++ 数论-质因数分解
- HDU2421Deciphering Password(数论&质因数分解)
- 【NOIP_入门数论】分解质因数
- 【NOIP入门数论】分解质因数
- [C/C++] 分解质因数
- C语言分解质因数
- C分解质因数
- 【C语言】分解质因数
- c算法-分解质因数
- c语言:分解质因数
- C语言分解质因数
- C语言-分解质因数
- C语言-分解质因数
- 【c语言】分解质因数
- C语言 > 分解质因数
- ACM数论基础之一_______质因数分解
- Filter(第三节)
- python: reduce函数
- 列表表达式实例
- Action和Page数据共享方式 (值栈/Context) 值栈获取方式
- Search for a Range--LeetCode
- C++ 数论-质因数分解
- Struts 2 访问session request application 对象的方式
- Mapping the request body with the @RequestBody annotation
- define(宏) const(常变量) enum(枚举)
- [noip2012]疫情控制(二分+贪心)
- 递归求和、阶乘、最大公约数 以及汉诺塔
- Spring@responseBody乱码解决
- 在 Qt 程序中使用 MPIR
- [Python 实战]