什么是质因数
质因数 = 质数 + 因数
分解质因数–短除法
小学数学内容:求6的质因数:从质数2开始除,6/2 = 3,3 / 3 = 1 到1结束,因此6 = 2 * 3,6的质因数为2^1 ,3^1
题目链接:867. 分解质因数 - AcWing题库
暴力做法
void divide(int n)
{
for(int i = 2; i <= n; i ++ )
{
if(n % i == 0)
{
int s = 0;
while(n % i == 0)
{
n /= i;
s ++;
}
cout << i << ' ' << s << endl;//i是指数,s是底数
}
}
}
注意:这里点赞多我就在这里证明一下循环里面的 i 一定是一个质数:假如 i 是一个合数,那么它一定可以分解成多个质因子相乘的形式,这多个质因子同时也是 a 的质因子且比 i 要小,而比 i 小的数在之前的循环过程中一定是被条件除完了的,所以 i 不可能是合数,只可能是质数
优化:n的质因子中最多只包含一个大于sqrt(n)的,,,因为两个的话相乘就大于n了
优化代码
void divide(int n)
{
for(int i = 2; i <= n / i; i ++ )//遍历到sqrt(n)即可
{
if(n % i == 0)
{
int s = 0;
while(n % i == 0)
{
n /= i;
s ++;
}
cout << i << ' ' << s << endl;
}
}
if( n > 1)//如果最后一个数不是1说明最后一个数是大于sqrt(n)的那一个,特殊处理即可
cout << n << ' ' << 1 << endl;
}