一:什么是质因数:一个是数的因数是质数的话,那么这个因数就是质因数
二:分解质因数:
每个合数都能够分为若干个质因数,证明:
1.如果k是合数,那么k肯定拥有除了1和k之外的因数,因数分为两者情况:
(1)质数,就是质因数
(2)合数:合数可以分解为其他的因数,分为质数和合数,所以最终能够分解为质数
2.如果k不拥有1和k之外的因数,那么k是质数
三:如何分解质因数
我们只需从小到大枚举(从2开始)数,只要i是质数n就除以i,知道最后枚举的i等于n为止
#include<iostream>
using namespace std;
void divide(int x)
{
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
{
int s = 0;
while (x % i == 0) x /= i, s ++ ;
cout << i << ' ' << s << endl;// 输出质因数和出现的次数
}
if (x > 1) cout << x << ' ' << 1 << endl;
cout << endl;
}
int main()
{
int n;
cin>>n;
divide(n);
}
解惑1:为什么循环条件是i<=x/i
因为一个合数x至多只有一个大于根号x的质数(如果有两个大于根号x的,那么两者相乘就大于x了,矛盾),所以我们只需要先把小于等于根号x的质因数提取出来,最后在判断是否有大于根号x的质因子即可,就是判断n是否大于1,如果大于1表面n没有被小于根号x的质因数除尽,那么剩下的就是大于根号x的质因子
解惑2:为什么是循环所有的数,而不是只循环质数:
因为循环到每一个合数之前,合数的质因数都已经被循环过了,如果这个合数能够进入
那么这个合数的质因数也一定可以进入这个循环,然后x会一直除以该质因数,所以循环到那个合数的时候一定不会进入这个循环。