判断素数(质数)java

判断素数(质数)

什么是素数

素数(Prime Number),又称质数是指在大于1的自然数中,除了1和本身之外,不能被其他自然数整除的数。例如,2、3、5、7、11等都是素数。

求解思路

要判断一个数是否为素数,一种简单的方法是试除法,即从2开始逐个试除,如果能整除则不是素数。但这种方法在判断较大的数时会比较耗时。下面介绍更高效的方法。

代码思路
  • 试除法:遍历2到该数的平方根,判断该数是否能被任意一个小于等于它平方根的数整除。如果能整除,则该数不是素数;否则,该数是素数。
  • 优化思路
    • 我们只需要遍历2到该数的平方根之间的数即可,因为大于平方根的因数必然与小于平方根的因数对称。
    • 此外,在判断一个数是否为素数时,我们只需要检查是否能被2到该数的平方根之间的数整除即可。而对于大于2的偶数,它们都能被2整除,因此不可能是素数。因此,在试除时,我们可以跳过所有的偶数,直接从3开始以步长为2逐个试除。这样可以减少循环的次数,提高算法效率。
复杂度分析
  • 时间复杂度:假设待判断的数为n,则试除法的时间复杂度为O(√n),因为我们只需遍历2到√n之间的数进行判断。
  • 空间复杂度:该算法的空间复杂度为O(1),因为只需要常数级别的额外空间来存储临时变量。
Java实现

下面是判断素数的Java代码实现:

java 复制代码
public class PrimeNumber {
    // 判断一个数是否为素数
    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        if (num == 2) {
            return true;
        }
        if (num % 2 == 0) {
            return false;
        }
        for (int i = 3; i * i <= num; i += 2) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        // 测试
        int[] testCases = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41};
        for (int num : testCases) {
            System.out.println(num + " 是素数吗?" + isPrime(num));
        }
    }
}
相关推荐
晓晓_za89866815 分钟前
Geo 优化源码二次开发:自定义地域规则改造实操文档
java·开发语言·搜索引擎·ci/cd·矩阵
摇滚侠15 分钟前
《SpringBoot 3:入门与应用实战》第 8 章 AOP 的进阶机制和应用 阅读笔记 16
java·spring boot·笔记
AI人工智能+电脑小能手35 分钟前
大白话说Java设计模式-38-迭代器模式(业务实战篇)
java·设计模式·迭代器模式·stream·遍历封装·集合通用·分页遍历
QQ_216962909638 分钟前
【源码编号:project86570】SpringBoot电影院在线选座售票系统:电影排片、在线选座、订单购票、后台管理完整实战
java·spring boot·后端
ShineWinsu1 小时前
对于TRAE中配置Qt的解析
开发语言·c++·ide·vscode·qt·ai·trae
谢亮_vipxieliang1 小时前
手机号验证技术方案:号段规则与正则表达式
java·服务器·spring boot·正则表达式·hibernate
wang09071 小时前
自己动手写一个tomcat之7监听器和过滤器
java·tomcat
梅孔立1 小时前
Pi-Agent 终极极简配置文档(Java+Vue+Python爬虫 4-5千文件项目)
java·vue.js·python
wy3136228211 小时前
Git——ignore让项目的 target 目录真正被忽略(忽略其他文件也是同样的道理)
开发语言·git
格林威1 小时前
C#图像分块处理:图像按行或按块(Tile)切分,多个 CPU 核心同时处理不同的区域
开发语言·图像处理·人工智能·机器学习·计算机视觉·c#·工业相机