每日算法(5)——正整数分解质因数

1、分解质因数介绍

每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。
参考百度

2、算法思路

先判断数num是否为合数,如果是,选择最小的质数k=2,进行分解质因数的过程:
(1)如果k小等于num,程序继续执行;
(2)如果num能被k整除,说明k是num的一个因数,并用num除以k的商作为新的正整数num,重复执行第一步;否则用k+1作为k的值,重复执行第一步。

3、具体代码

package com.peter.algorithm.other;

import org.junit.Test;
import java.util.ArrayList;

public class DecomposePrimeNumber {
    @Test
    public void test() {
        ArrayList<Integer> compositeNumberList = new ArrayList<>();
        ArrayList<Integer> primeNumberList = new ArrayList<>();
        for (int i = 2; i < 100; i++) {
            if (isCompositeNumber(i)) {
                compositeNumberList.add(i);
                System.out.println(decomposePrimeNumber(i));
            } else {
                primeNumberList.add(i);
            }
        }
        System.out.println(compositeNumberList);
        System.out.println(primeNumberList);
    }

    public static String decomposePrimeNumber(int num) {
        if (num < 2 || num > Integer.MAX_VALUE) {
            throw new IllegalArgumentException("out of range!");
        }
        if (!isCompositeNumber(num)) {
            return num + " is not a composite number!";
        }
        StringBuffer stringBuffer = new StringBuffer(num + "=");
        int begin = 2;
        while (num >= begin) {
            if (num % begin == 0) {
                stringBuffer.append(begin + "*");
                num /= begin;
            } else {
                begin++;
            }
        }
        return stringBuffer.toString().substring(0, stringBuffer.length() - 1);
    }
    //判断一个数是否为合数
    private static boolean isCompositeNumber(int num) {
        if (num < 2 || num > Integer.MAX_VALUE) {
            throw new IllegalArgumentException("out of range!");
        }
        int begin = 2;
        int sum = 0;
        while (num >= begin) {
            if (num % begin == 0) {
                num /= begin;
                sum++;
            } else {
                begin++;
            }
        }
        return sum > 1 ? true : false;
    }
}

4、2至99之间的合数分解质因数

类别具体整数
合数4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99
素数2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
合数分解质因数
42*2
62*3
82*2*2
93*3
102*5
122*2*3
142*7
153*5
162*2*2*2
182*3*3
202*2*5
213*7
222*11
242*2*2*3
255*5
262*13
273*3*3
282*2*7
302*3*5
322*2*2*2*2
333*11
342*17
355*7
362*2*3*3
382*19
393*13
402*2*2*5
422*3*7
442*2*11
453*3*5
462*23
482*2*2*2*3
497*7
502*5*5
513*17
522*2*13
542*3*3*3
555*11
562*2*2*7
573*19
582*29
602*2*3*5
622*31
633*3*7
642*2*2*2*2*2
655*13
662*3*11
682*2*17
693*23
702*5*7
722*2*2*3*3
742*37
753*5*5
762*2*19
777*11
782*3*13
802*2*2*2*5
813*3*3*3
822*41
842*2*3*7
855*17
862*43
873*29
882*2*2*11
902*3*3*5
917*13
922*2*23
933*31
942*47
955*19
962*2*2*2*2*3
982*7*7
993*3*11
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的。 如果你想要用 Python 来将正整数分解成质因数,你可以用下面的代码来实现: ``` def prime_factors(n): i = 2 factors = [] while i * i <= n: if n % i: i += 1 else: n //= i factors.append(i) if n > 1: factors.append(n) return factors ``` 这段代码使用了一种叫做“质因数分解”的算法。它把正整数分解成质因数的形式,比如说,对于数字 12,它会输出 `[2, 2, 3]`。 你可以这样使用这段代码: ``` print(prime_factors(12)) # [2, 2, 3] print(prime_factors(25)) # [5, 5] print(prime_factors(100)) # [2, 2, 5, 5] ``` 希望这个答案对你有帮助! ### 回答2: Python可以通过以下代码将正整数分解成质因数: ```python def prime_factors(n): factors = [] # 存储质因数的列表 if n < 2: # 如果小于2,则无质因数 return factors while n % 2 == 0: # 如果能被2整除,2即为一个质因数 factors.append(2) n = n // 2 # 将n除以2以便继续寻找质因数 i = 3 while i * i <= n: # 寻找大于2的其他质因数 while n % i == 0: # 如果n能被i整除,i即为一个质因数 factors.append(i) n = n // i # 将n除以i以便继续寻找质因数 i += 2 # 只在奇数上进行寻找 if n > 2: # 如果n本身是个质数,则将其加入质因数列表 factors.append(n) return factors number = int(input("请输入一个正整数: ")) factors = prime_factors(number) print(f"{number}的质因数为: {factors}") ``` 以上代码定义了一个`prime_factors`函数,该函数接受一个正整数参数`n`,然后通过循环与判断找出`n`的所有质因数,并将其存储在一个列表中返回。最后,通过用户输入获取一个正整数,并调用`prime_factors`函数将其质因数打印出来。 ### 回答3: Python可以使用质因数分解来将一个正整数分解成一系列质数的乘积。可以利用循环和判断来实现这个过程。 首先,我们可以编写一个函数来判断一个数是否为质数。一个数若除了1和它本身外没有其他因数,那么它就是质数。可以通过循环去除从2到该数的所有整数,若该数能整除其中的某个数,则说明它不是质数。如果没有能整除它的数,那么它就是质数。 接下来,我们可以编写一个函数来实现质因数分解。首先,我们选取最小的质数2,将待分解的数从2开始除,如果能整除,则该数是一个质因数。然后,我们将待分解的数除以这个质数,再次判断是否能整除。如果能整除,则继续除以这个质数。以此类推,直到待分解的数不能再被这个质数整除为止。然后,我们选择下一个大于当前质因数的最小质数,重复上述步骤。直到待分解的数被分解为1。 最后,我们将所有的质因数保存下来,并输出结果。 下面是Python的代码示例: ```python def is_prime(n): if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def prime_factorization(n): factors = [] if n < 2: return factors i = 2 while n > 1: if n % i == 0: factors.append(i) n /= i else: i += 1 while not is_prime(i): i += 1 return factors n = int(input("请输入一个正整数:")) result = prime_factorization(n) print(f"{n}的质因数分解结果为:{' × '.join(map(str, result))}") ``` 以上代码中,我们使用了两个函数,`is_prime`用于判断一个数是否为质数,`prime_factorization`用于进行质因数分解。 在代码中,我们通过循环将待分解的数除以从2开始的所有质数,如果能整除,则将该质数添加到结果列表中,并将待分解的数除以该质数。否则,我们寻找下一个质数。直到待分解的数变为1时,说明已经完成了质因数分解。最后,我们将质因数列表按照格式输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值