分解质因数

435 阅读1分钟

什么是质因数

质因数 = 质数 + 因数

分解质因数--短除法

小学数学内容:求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;
}