分解质因数

什么是质因数

质因数 = 质数 + 因数

分解质因数–短除法

小学数学内容:求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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值