素因子数学原理

在寻找一个数的素因子时:

1.任何正整数都可以唯一地被分解成若干个素数的乘积。

这个定理是数论中的基本定理之一,被称为算术基本定理。

可以这么理解:这个数有两种情况:①素数,则不用分解;②合数,则根据概念,合数就是除了自身和1之外还有其他因子,所以它一定可以分解成其他因子。

这些因子又进入上面判断,如果是素数就结束,如果是合数就又可以这样分解下去,直到两个都是素数。结局就是唯一地被分解成若干个素数的乘积。

2.考虑关于一个大于1的正整数i,可以写成 i=a*b,我说这两个数其中一定存在一个数<=\sqrt{i}

3.就是对i进行素因子分解,如果\sqrt{i}是它的素因子,则有且只能有一个。

这一点我们可以由反证法证明:如果存在两个大于\sqrt{i}的数是i的素因子则这两个数相乘之后一定大于i本身。

所以,我们可以直接从2开始一直整除目标数i,值记为a,迭代更新a;2整除到不能再除时换下一个素数继续除,但是有个问题就是在写代码时没有一个素数序列,这个时候我们这么解决:

采用奇数序列,2之后也就是3,然后是5、7,接着是9,这个时候我们注意,这个时候b一定不能被9整除,因为所有可以被9整除的数都可以被3整除,也就是虽然用奇数序列,但是奇数序列里面的合数不可能起作用,因为这个奇数序列里面的合数(比如9)的因子一定比本身小,所以目标数已经被提前处理过。

直到处理到\sqrt{i},就结束。

接下来贴一下处理代码:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static List<Integer> primeFactors(int n) {
        List<Integer> factors = new ArrayList<>();
        
        // 处理偶数因子
        while (n % 2 == 0) {
            factors.add(2);
            n /= 2;
        }
        
        // 处理奇数因子
        for (int i = 3; i <= Math.sqrt(n); i += 2) {
            while (n % i == 0) {
                factors.add(i);
                n /= i;
            }
        }
        
        // 处理剩余的素数
        if (n > 2) {
            factors.add(n);
        }
        
        return factors;
    }

    public static void main(String[] args) {
        int number = 56;
        List<Integer> factors = primeFactors(number);
        System.out.println("The prime factors of " + number + " are: " + factors);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值