做内容网站网站seo分析常用的工具是
问题描述:接收用户输入的数字,判断是否是质数(素数)以及输出1-100之间的所有质数
质数的概念:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数叫做质数,也称为素数
规定:1既不是质数也不是合数
实现思路:
初始化Scanner对象以接收用户输入。
使用Scanner的nextInt方法读取用户输入的一个整数。
使用一个for循环从0遍历到100,对每一个整数调用isPrime2方法判断是否为质数,如果是,则将其输出到控制台。
isPrime1方法(暴力迭代法):
检查输入的数字是否小于或等于1,如果是,则直接返回false(因为质数定义为大于1的自然数)。
使用for循环从2遍历到输入的数字减1,检查是否存在一个数能够整除输入的数字。
如果存在这样的数,则返回false,表示输入的数字不是质数。
如果循环结束都没有找到能整除的数,则返回true,表示输入的数字是质数。
isPrime2方法(平方根):
首先检查输入的数字是否小于或等于1,如果是,返回false。
使用数学定理进行优化:一个合数一定可以分解为两个因数,且至少有一个因数不大于它的平方根。因此,我们只需要检查从2到该数字平方根的所有整数是否能整除它。
使用for循环从2遍历到输入数字的平方根(取整),检查是否存在一个数能够整除输入的数字。如果存在这样的数,返回false;否则,返回true。
代码实现:
方法一: 暴力迭代法
public static boolean isPrime1(int number) {if(number<=1) {return false;}for(int i=2;i<number;i++) {if(number%i==0) {return false;}}return true;}
输出结果:
32
false
方法二:平方根
- 数学定理:如果一个数n不是质数,则n = x * y,
- 并且同时满足:x<=sqrt(n) y>=sqrt(n)
- 例如:100 = 2*50 =4*25 = 5*20 = 10*10
代码实现:
//平方根public static boolean isPrime2(int number) {//数学定理:如果一个数n不是质数,则n = x * y,//并且同时满足:x<=sqrt(n) y>=sqrt(n)//例如:100 = 2*50 =4*25 = 5*20 = 10*10if(number<=1) {return false;}for(int i=2;i<=Math.sqrt(number);i++) {if(number%i==0) {return false;}}return true;}
输出结果:
32
false
输出1-100之间的所有质数
代码实现:
package com.ztt.exercise.Demo04;import java.util.Scanner;
/** 接收用户输入的数字,判断是否是质数(素数)*/public class demo04 {public static void main(String[] args) {try(Scanner input=new Scanner(System.in)){int n=input.nextInt();boolean ret=isPrime1(n);System.out.println(ret);}for(int i=0;i<=100;i++) {if(isPrime2(i)) {System.out.println(i);}}}
输出结果:
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