判断质数和用算数基本定理分解质因数

判断质数和用算数基本定理分解质因数

摘要

本文主要讲解如何判断一个数是质数,和如何对一个数分解质因数。本文是很基础的也很重要的数学知识。

质数

质数又称为素数,是指大于1的并且除了1和它本身外,没有其他因数的自然数。

判断一个数是否是质数

假设该数为n, 我们只需要判断

[2,n]

内是否有n的因子。如果有,则n为合数,否则,n为质数。
这种方法被称为试除法, 即试着除一下所有可能的因子。

试除法代码:

public static Boolean isprime(int n){
    if(n == 1) return false;
    for(int i = 2; i <= n / i; i++){
        if(n % i == 0){
            return false;
        }
    }
    return true;
}

注意:以上代码中,for循环的结束条件是 i <= n/i,相当于i <= sqrt(n),两种写法都可以,只不过调用sqrt()函数会慢一些,因为for循环每次循环都会调用该函数。另外,不能写成i * i <= n
因为当n很接近int的最大值时,i*i可能会溢出。

分解质因数

根据算术基本定理又称唯一分解定理,对于任何一个合数, 我们都可以用几个质数的幂的乘积来表示。

N=p1k1p2k2...pnknp1<p2<...<pn

12=223

20=225

30=225

接下来我们利用这个公式分解质因数。
设一个质数为p.如果n%p == 0,那么p就是n的一个质因数,接下来就是求p的指数,我们让n = n/p, 这样就从n中剔除了一个p,接着重复上述两步,直到n%p != 0

代码

public static void prime(int n){
    for(int i = 2; i <= n / i; i++){
        int a = 0, b = 0;
        while(n % i == 0){
            a = i;
            n /= i;
            b++;
        }
        if(b > 0)
            System.out.println(a + " " + b);
    }
    if(n > 1) System.out.println(n + " " + 1);
}

注意:以上代码中for循环的结束条件也是i <= n / i,因为根据公式,最多只可能有一个质因数是大于

n

,因为有两个的话,乘积肯定超过n了。所以当for循环结束后判断n是否大于1,如果大于就说明有一个大于

n

的质因数。
注: 转载于 https://blog.csdn.net/GD_ONE/article/details/104579936

posted @   记录学习Blog  阅读(419)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示