#include <iostream>
using namespace std;
void divide(int x)
{
for(int i = 2; i <= x / i; i++)//一个数的质因数不会大于它的平方根
{
if(x % i == 0)//查当前的整数 i 是否是 x 的因子,这通过判断 x % i == 0 来实现
{
int s = 0;
while(x % i == 0)//不断地除以 i,从而统计出 x 可以被 i 整除的次数 s。在这个过程中,会将 x 更新为 x / i
{
s ++;
x = x / i;
}
cout << i << ' ' << s << endl;
}
}
if(x) cout << x << ' ' << 1 << endl;
}
int main()
{
int a;
cin >> a;
divide(a);
return 0;
}
在
divide
函数中,使用循环遍历从2开始到x的平方根取整的所有整数的目的是为了寻找x
的质因数。这是因为一个数的质因数不会大于它的平方根。例如,如果有一个数x,它有一个大于1的因数a。那么必然存在另一个因数b,使得a*b=x。这意味着a和b中必有一个小于或等于x的平方根。因此,如果我们在2到x的平方根范围内找不到能整除x的数,那么x就是一个质数。