求素數的幾種方法
阿新 • • 發佈:2018-12-20
方法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個素數表的方法
int [] primes = new int [50];
primes[0] = 2;
int cnt = 1;
MAIN_LOOP:
for(int x=3;cnt<primes.length;x++)
{
for (int i=0;i<cnt;i++)
{
if(num%primes[i]==0)
{
continue MAIN_LOOP;
}
}
primes[cnt++]=num;
}
for(int k:primes)
{
System.out.println(k+" ");
}
System.out.println();