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

yizhihongxing

判断一个数是否是素数是一个常见的算法问题,下面是用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日

相关文章

  • Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

    下面详细讲解一下“Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)”的完整攻略。 一、背景介绍 在我们的开发过程中,经常需要发布新的代码到服务器上。但是每次手动更新是十分繁琐的,而且还容易出错。因此我们需要一个自动化的过程来完成这个任务。Jenkins是目前最流行的自动化构建工具之一,它可以帮助我们实现自动化构建、测试、部署等任…

    Java 2023年5月20日
    00
  • 浅谈SpringMVC jsp前台获取参数的方式 EL表达式

    关于浅谈SpringMVC jsp前台获取参数的方式 EL表达式,以下是完整攻略。 一、什么是EL表达式 EL(Expression Language)表达式是JSP 2.0引入的一种表达式语言,它主要用于动态的访问和操作JavaBean中的数据。 二、EL表达式的特点 EL表达式有以下特点: 提供了一种简洁的访问JavaBean属性的方式,不需要借助Jav…

    Java 2023年6月15日
    00
  • Java Socket实现文件传输示例代码

    Java Socket实现文件传输是一项很有用的功能,它可以用于将文件在不同的计算机之间传输。下面将会提供一份完整的攻略,帮助你实现Java Socket实现文件传输。 一、创建Socket 在Java中,可以通过Socket类来创建Socket。使用Socket类可以连接到远程计算机上的Socket服务端程序。这个服务端程序可以接收客户端发送的数据,从而实…

    Java 2023年5月19日
    00
  • Java 垃圾回收机制详解(动力节点Java学院整理)

    下面就来详细讲解一下Java垃圾回收机制的完整攻略。 什么是Java垃圾回收机制? 在Java程序运行时,创建了很多对象。这些对象可能被使用,也有可能不需要使用了,但是它们占用着内存空间。如果没有及时处理,这些无用的对象会一直占用着内存,导致内存不足。因此,Java提供了垃圾回收机制,专门负责回收这些无用的对象占用的内存空间,为程序提供更多的内存供应。 Ja…

    Java 2023年5月20日
    00
  • JavaWeb文件上传流程

    JavaWeb文件上传是Web开发中经常遇到的需求,下面将详细讲解JavaWeb文件上传的流程及相关代码示例: 1. 前端文件选择及上传 在前端页面中,需要定义一个表单,使用表单的file类型获取文件,将文件数据通过Ajax发往后端服务器。 下面是一个简单的HTML页面示例,其中包含一个表单和一个上传文件的input标签: <!DOCTYPE html…

    Java 2023年5月19日
    00
  • Win10系统下配置java环境变量的全过程

    下面是Win10系统下配置java环境变量的全过程: 下载JDK安装包 在Oracle官网上下载自己所需的JDK安装包,下载地址:https://www.oracle.com/java/technologies/javase-jdk15-downloads.html 安装JDK 运行JDK安装包,按照默认设置一路下一步,最后点击“完成”即可。 查看Java安…

    Java 2023年5月24日
    00
  • 举例说明Java中代码块的执行顺序

    我来为你详细讲解一下Java中代码块的执行顺序。 在Java中,代码块是一组语句,它们被包含在一对大括号中。它们可以是类中的静态或非静态代码块,或是方法中的局部代码块。在执行Java代码时,它们会按照一定的顺序被执行。 Java中,代码块的执行顺序为:静态代码块->非静态代码块->构造函数->普通方法。 以下是两个示例来说明Java中代码块…

    Java 2023年5月23日
    00
  • servlet和tomcat_动力节点Java学院整理

    Servlet和Tomcat 前言 在 Java 编程中,Servlet 是一个底层的基础模块。它负责处理来自 Web 服务请求并返回响应。Tomcat 是一个 Servlet 容器,也就是说,它可以部署和运行 Servlet 应用程序。因此,学习 Servlet 和 Tomcat 是Web开发的第一步。 本文将详细讲解 Servlet 和 Tomcat 的…

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