1. 程式人生 > >求素數的幾種方法

求素數的幾種方法

方法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();