java如何判断一个数是否是素数(质数)

判断一个数是否是素数是一个常见的算法问题,下面是用java编写的实现方法:

1.判断算法

判断一个数x是否为素数的方法是判断x是否能被2~sqrt(x)范围内的整数整除。如果有一个数能够整除x,那么x就不是素数,否则x就是素数。

示例代码:

public static boolean isPrime(int x) {
    if (x < 2) {  // 小于2的数都不是素数
        return false;
    }
    for (int i = 2; i <= Math.sqrt(x); i++) {
        if (x % i == 0) {   // 能够整除
            return false;
        }
    }
    return true;
}

2.测试算法

为了测试isPrime算法的正确性,我们可以编写一个程序,用于判断指定范围内的所有整数是否为素数,并输出结果。

示例代码:

public static void main(String[] args) {
    int n = 100;
    System.out.printf("2~%d的素数:\n", n);
    for (int i = 2; i <= n; i++) {
        if (isPrime(i)) {
            System.out.print(i + " ");
        }
    }
}

输出结果:

2~100的素数:
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 

上述程序会输出2~100的素数,结果与数学事实相符。因此可以证明isPrime算法的正确性。

3.优化算法

在调用isPrime算法时,我们只需要判断2~sqrt(x)范围内是否有数能够整除x,因此可以做个小优化:只需判断2和所有奇数是否能够整除x即可,因为偶数都能够被2整除。

修改isPrime算法:

public static boolean isPrime(int x) {
    if (x < 2) {  // 小于2的数都不是素数
        return false;
    }
    if (x == 2 || x == 3) {  // 2和3都是素数
        return true;
    }
    if (x % 2 == 0) {  // 偶数都不是素数
        return false;
    }
    for (int i = 3; i <= Math.sqrt(x); i += 2) {
        if (x % i == 0) {   // 能够整除
            return false;
        }
    }
    return true;
}

这个修改后的算法将只会判断2和所有奇数是否能够整除x,从而加快了算法的执行速度。

示例代码:

public static void main(String[] args) {
    int n = 100;
    System.out.printf("2~%d的素数:\n", n);
    for (int i = 2; i <= n; i++) {
        if (isPrime(i)) {
            System.out.print(i + " ");
        }
    }
}

输出结果:

2~100的素数:
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 

可以看到,输出结果与前面的测试结果相同,但是这个算法的执行速度要更快。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java如何判断一个数是否是素数(质数) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java虚拟机之对象创建过程与类加载机制及双亲委派模型

    Java虚拟机之对象创建过程 Java中的对象在内存中的实现是由Java虚拟机(JVM)负责完成的。对象的创建过程分为三步: 分配内存空间:JVM为对象在堆内存中分配一块连续的内存空间。 初始化对象:JVM为对象的成员变量赋初始值。 调用构造函数:JVM调用对象的构造函数来完成对象的初始化。 例子说明 public class Person { privat…

    Java 2023年5月26日
    00
  • Spring多个数据源配置详解

    Spring 多数据源配置是在一个应用程序里使用不同的数据源连接数据库,通过配置多个数据源,实现不同模块、不同业务区分对应的数据库连接。下面是详细攻略: 1. 添加依赖 首先在 pom.xml 文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId&g…

    Java 2023年5月20日
    00
  • Java实战之用hutool-db实现多数据源配置

    当我们的应用需要连接多个数据库时,常规的做法是通过JDBC来手动连接和操作不同的数据源。这样的代码通常会显得冗长和重复,对于代码维护和可读性都造成了一定的负担。事实上,Java中有一些工具库可以帮助我们更容易地实现多数据源配置和自动化操作,比如常用的HikariCP、Druid等数据库连接池,还有hutool-db库。 Hutool-db简介 Hutool-…

    Java 2023年5月20日
    00
  • slf4j使用log4j的配置参数方式

    slf4j是一个Java日志框架的抽象层,它可以与多种具体的日志框架进行绑定。log4j是其中一种在Java程序中常见的日志框架,可以与slf4j进行绑定。通过使用slf4j和log4j,可以在代码中进行方便的日志记录和管理。 以下是使用log4j作为实际日志框架的示例: 添加依赖 首先需要在项目的pom文件中添加slf4j和log4j的依赖。 <de…

    Java 2023年5月20日
    00
  • String类的获取功能、转换功能

    String类是Java中的一个重要的类,可以用于处理文本字符串。为了更好地使用String类,我们需要了解其中一些重要的功能,如获取功能和转换功能。在下面的内容中,我将详细讲解这些功能的使用。 String类的获取功能 String类中的获取功能可以帮助我们获取字符串中的信息,如字符串长度、子字符串等等。下面是一些常用的获取函数: length() 该函数…

    Java 2023年5月27日
    00
  • 教你如何使用Java多线程编程LockSupport工具类

    教你如何使用Java多线程编程LockSupport工具类 什么是LockSupport LockSupport是JavaSE 5引入的一个工具类,用于线程的阻塞和唤醒。它可以在任何时刻,让一个正在运行的线程阻塞或者唤醒它。 LockSupport的使用 park()方法 LockSupport类下的park方法可以阻塞线程,直到调用它的unpark方法或者…

    Java 2023年5月18日
    00
  • JSP开发之生成图片验证码技术的详解

    JSP开发之生成图片验证码技术的详解 什么是图片验证码 图片验证码是一种常见的图形验证码,用于验证用户是否为真实用户,防止恶意机器程序攻击,比如暴力破解密码、模拟用户登录等。图片验证码通常由一张随机生成的图像和一个文本框组成,用户需要手动输入图像中显示的文本才能通过验证。 生成图片验证码的技术 在JSP开发中,生成图片验证码的技术通常使用Java中的Grap…

    Java 2023年6月15日
    00
  • Java系统运行缓慢等问题的排查思路

    我来详细讲解一下“Java系统运行缓慢等问题的排查思路”的完整攻略。 1. 问题定位 首先,我们需要明确具体的问题现象。如果Java系统运行缓慢,可能会有以下一些表现形式: 请求响应时间过长 CPU占用率较高 内存使用率较高 日志输出异常 根据问题现象,我们可以使用以下一些工具来定位问题: 配置管理工具:例如Ansible、Puppet,可以帮助我们收集系统…

    Java 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部