分解质因数和求因数个数
2013-11-05 18:41
232 查看
一个正整数N>1,必定可以分解为若干质因数相乘,即N=2^x1*3^x2*...*prime^xi,prime<=N
分解时一步步求N mod i , 2<=i<=N,然后N /= i,即可,具体证明算了= =。。因为能分解下去就一直分解,得到的数再mod必定mod是质数。
代码:
============================================================
首先给出结论:对于任意的整型N,分解质因数得到N= P1^x1 * P2^x2* …… * Pn^xn
则N的因子个数M为 M=(x1+1) * (x2+1) * …… *(xn+1)
证明:
每一个质因子的不同指数幂与其它质因子相乘,得到的结果一定不会重复
因此能够将所有的因子都列举出来。
况且质数的和可以组成任意大于1的数的
代码:
(只是在分解质因数中加上了计数而已)
分解时一步步求N mod i , 2<=i<=N,然后N /= i,即可,具体证明算了= =。。因为能分解下去就一直分解,得到的数再mod必定mod是质数。
代码:
int i = 1; while(n > 1) { i++; while(!(n % i)) //要一直分解下去 { n /= i; cout << i; if(n != 1) cout << "*"; } }
============================================================
首先给出结论:对于任意的整型N,分解质因数得到N= P1^x1 * P2^x2* …… * Pn^xn
则N的因子个数M为 M=(x1+1) * (x2+1) * …… *(xn+1)
证明:
每一个质因子的不同指数幂与其它质因子相乘,得到的结果一定不会重复
因此能够将所有的因子都列举出来。
况且质数的和可以组成任意大于1的数的
代码:
int i = 1, s = 1, t; while(n > 1) { i++; t = 0; while(!(n % i)) { n /= i; t++; cout << i; if(n != 1) cout << "*"; } s *= (t+1); }
(只是在分解质因数中加上了计数而已)
相关文章推荐
- 分解质因数: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数
- n!分解质因数、因数
- 有功功率、无功功率、视在功率、功率因数及峰值因子
- 分解质因数,生成素数表
- 分解质因数
- fafu 1079 帮冬儿忙 组合数包含因数个数
- 找到600851475143的最大质因数
- 找因数,找相同
- 谐振电路及品质因数(一)
- 数论概论笔记 第6章 线性方程与最大公因数
- C++编程百例 完全数 因数
- UVa 10879 Code Refactoring (因数分解)
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
- 分解质因数
- poj1845 Sumdiv(数论,因数和,等比数列,快速幂)
- 求1500个因数是2、3、5的数
- UVA - 11490 Just Another Problem (因数分解)
- 【沙茶了+筛选保存最大质因数】【HDU2136】Largest prime factor
- Codeforces 490D. Chocolate(分解质因数求解)
- 分解质因数