求素数
设计一个程序, 输入N, 输出0~N之间的所有素数
(0<N<MAX_INT)
样例输入:
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
让我们先来回顾一下素数的概念:
素数(Prime number),又称质数,是在大于1的自然数中,除了1和它本身以外不再有其他因数的数。换句话说,如果一个数只有1和它本身两个正因数,那么这个数就是素数。
例如,2、3、5、7、11、13、17、19、23等都是素数。其中,2是唯一的偶数素数,其他素数都是奇数。
素数在数论中有着非常重要的地位,它们是构成自然数的基础。此外,素数在密码学、计算机科学等领域也有着广泛的应用。
判断一个数是否为素数,有多种方法,如试除法、埃拉托斯特尼筛法等。其中,试除法是最简单直接的方法,但对于大数来说效率较低;埃拉托斯特尼筛法可以高效地找出一定范围内的所有素数。
需要注意的是,1不是素数,因为它只有一个正因数。同样,0和负数也不是素数。
代码逻辑:
-
isPrime
函数接受一个整数参数num
,并返回一个布尔值,表示这个数是否为素数。函数内部使用一个循环,从2开始,到Math.sqrt(num)
结束,判断num
是否能被其中的任何一个数整除。如果能,则返回false
,表示num
不是素数;否则返回true
,表示num
是素数。这里使用Math.sqrt(num)
作为循环的上限,是因为如果一个数不是素数,那么它必定有一个因数小于或等于它的平方根。 -
main
函数首先通过Scanner
类从用户那里获取一个整数N
,然后输出"0到N之间的所有素数如下:"。接着,使用一个循环,从2开始,到N结束,对每个数调用isPrime
函数。如果isPrime
函数返回true
,则输出当前的数,即为素数。
代码如下:
import java.util.Scanner;
public class Main {
public static boolean isPrime(int num) {
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字N (0<N<MAX_INT): ");
int N = scanner.nextInt();
System.out.println("0到N之间的所有素数如下:");
for (int num = 2; num <= N; num++) {
if (isPrime(num)) {
System.out.println(num);
}
}
}
}