方法1. 从2到n-1测试是否可以整除n。这种方法对于n要循环n-1遍,当n很大时,就可以看作是n遍
import java.util.Scanner;
public class isPrime {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
boolean isPrime = true;
if( num == 1){
isPrime = false;
}
for(int i=2;i<num;i++){ //从2到num-1测试是否可以整除
if(num%i==0) {
isPrime = false;
break;
}
}
if(isPrime) {
System.out.println(num+"是素数");
}
else {
System.out.println(num+"不是素数");
}
}
}
方法2. 由于所有的偶数(除了2以外)都不是素数,因此可去掉偶数后,从3到n-1,循环每次加2。这种方法对于n是偶数情况只需运行1次,否则要循环(n-3)/2+1遍,当n很大时,就可以看作是n/2遍
import java.util.Scanner;
public class isPrime {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
boolean isPrime = true;
if (num == 1 || num % 2 == 0 && num != 2) {
isPrime = false;
} else {
for (int i = 3; i < num; i += 2) { //从3到num-1测试是否可以整除;循环每次加2
if (num % i == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
System.out.println(num + "是素数");
} else {
System.out.println(num + "不是素数");
}
}
}
方法3. 与方法2类似,但不需要测试到n-1,到sqrt(n)就够了。这种方法只要循环sqrt(n)遍
for (int i = 3; i < Math.sqrt(num); i += 2)
{
if (num % i == 0)
{
isPrime = false;
break;
}
}
方法4.还有一种更快的方法是判断能否被已知的且小于n的素数整除,这种方法
需构建前50个素数的表
本文只说明构建前50个素数表的方法
import java.util.Scanner;
public class isPrime {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int[] primes = new int[50];
primes[0] = 2;
int cnt = 1;
MAIN_LOOP:
for (int num = 3; cnt < primes.length; num++) {
for (int i = 0; i < cnt; i++) {
if (num % primes[i] == 0) {
continue MAIN_LOOP;
}
}
primes[cnt++] = num;
}
for (int k : primes) {
System.out.print(k + " ");
}
}
}
结果截图