质数的判定——试除法
创始人
2024-06-02 11:24:41
0

判断质数

      • 一、质数定义
      • 二、例题
          • (1)试题
          • (2)资源限制
          • (3)问题描述
          • (4)输入格式
          • (5)输出格式
          • (6)样例输入
          • (7)样例输出
      • 三、质数判定方法:试除法
          • (1)时间复杂度较高的暴力算法O(n)
            • ①代码
            • ②评测结果
          • (2)时间复杂度较低的算法O(√n)
            • ①代码
            • ②评测结果
      • 四、相关例题
          • (1)算法提高 质数1
            • ①问题描述
            • ②输入格式
            • ③输出格式
            • ④样例输入
            • ⑤样例输出
            • ⑥代码
          • (2)算法提高 质数2
            • ①问题描述
            • ②输入格式
            • ③输出格式
            • ④样例输入
            • ⑤样例输出
            • ⑥代码
          • (3)算法提高 素数之和
            • ①问题描述
            • ②输入格式
            • ③输出格式
            • ④样例输入
            • ⑤样例输出
            • ⑥代码

一、质数定义

  • 在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数

二、例题

(1)试题
  • 算法提高 质数
(2)资源限制
  • 内存限制:256.0MB
  • C/C++时间限制:1.0s
  • Java时间限制:3.0s
  • Python时间限制:5.0s
(3)问题描述
  • 输入一个数判断是否为质数。是则输出“yes”,否者输出“no”
(4)输入格式
  • 一行一个正整数。
(5)输出格式
  • 一行,“yes”或者“no”,意义见题面。
(6)样例输入

3

(7)样例输出

yes

三、质数判定方法:试除法

(1)时间复杂度较高的暴力算法O(n)

直接利用定义,从2到n-1每个都试除一下即可

①代码
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();boolean result = is_prime(n);if (result == true){System.out.println("yes");}else {System.out.println("no");}}//判断质数//质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数public static boolean is_prime(int n){if (n < 2){return false;}for (int i = 2; i < n; i++) {if (n % i == 0){return false;}}return true;}
}
②评测结果

在这里插入图片描述

(2)时间复杂度较低的算法O(√n)

被除数的两个约数总是对应存在的

  • 例如:
    12的约数有3和4
    12/3 = 4
    12/4 = 3
  • 假设:
    d是n的一个约数
    则n/d也是n的一个约束
    d<=n/d
    d的平方<=n
    d<=√n

因此我们所枚举的约数只需要到n/d就好了,大大降低了时间复杂度,降到了O(√n)

①代码
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();boolean result = is_prime(n);if (result == true){System.out.println("yes");}else {System.out.println("no");}}//判断质数//质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数public static boolean is_prime(int n){if (n < 2){return false;}for (int i = 2; i <= n/i; i++) {if (n % i == 0){return false;}}return true;}
}
②评测结果

在这里插入图片描述

四、相关例题

(1)算法提高 质数1
①问题描述
  • 给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数
②输入格式
  • 输入一行,包含一个正整数N
③输出格式
  • 共两行。
  • 第1行包含若干个素数,每两个素数之间用一个空格隔开,素数从小到大输出。
  • 第2行包含一个整数,表示N以内质数的个数。
④样例输入

10

⑤样例输出

2 3 5 7
4

⑥代码
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int count = 0;if (n <= 2){System.out.println(0);}else {for (int i = 2; i < n; i++) {if (is_prime(i)){System.out.print(i+" ");count++;}}System.out.println();System.out.print(count);}}//判断质数//质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数public static boolean is_prime(int n){if (n < 2){return false;}for (int i = 2; i <= n/i; i++) {if (n % i == 0){return false;}}return true;}
}
(2)算法提高 质数2
①问题描述
  • 给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数。
②输入格式
  • 输入一行,包含一个正整数N
③输出格式
  • 共两行。
  • 第1行包含一个整数,表示N以内质数的个数。
  • 第2行包含若干个素数,每两个素数之间用一个空格隔开,素数从小到大输出。
④样例输入

10

⑤样例输出

4
2 3 5 7

⑥代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int count = 0;ArrayList l = new ArrayList<>();if (n <= 2){System.out.println(0);}else {for (int i = 2; i < n; i++) {if (is_prime(i)){l.add(i);count++;}}System.out.println(count);for (int i = 0; i < l.size(); i++) {System.out.print(l.get(i)+" ");}}}//判断质数//质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数public static boolean is_prime(int n){if (n < 2){return false;}for (int i = 2; i <= n/i; i++) {if (n % i == 0){return false;}}return true;}
}
(3)算法提高 素数之和
①问题描述
  • 给定正整数N,求[1,N]之间的所有素数之和.如果没有素数,则之和为0. 1<=N<=1000
②输入格式
  • 输入有多行,每行有一个正整数n(1<=n<=1000),如果输入为0,则退出
③输出格式
  • 对应每行输入的整数,输出[1,N]之间的所有素数之和.每个结果占一行.
④样例输入

1
2
4
0

⑤样例输出

0
2
5

⑥代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ArrayList a = new ArrayList();while (true){int n = sc.nextInt();if (n != 0){int sum = 0;if (n <= 1){a.add(0);continue;}else {for (int i = 2; i <= n; i++) {if (is_prime(i)) {sum += i;}}a.add(sum);continue;}}for (int i = 0; i < a.size(); i++) {System.out.println(a.get(i));}}}//判断质数//质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数public static boolean is_prime(int n){if (n < 2){return false;}for (int i = 2; i <= n/i; i++) {if (n % i == 0){return false;}}return true;}
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...