Java求質數演算法__Java

來源:互聯網
上載者:User

package com.test_java;import java.util.Arrays;public class Prime {/* * **求N以內的質數 */int N;int i,j;Prime(int inputN){this.N = inputN;}//普通試除法private void comPrime1_1(){System.out.println("小於" + N + "的質數有:");for(i=N;i>=0;i--){for(j=i-1;j>=2;j--){if(i%j==0){break;}if(j<=2)System.out.println(i);}}System.out.println(2);}//迴圈到sqrt(N)即可,簡單解釋一下:因數都是成對出現的。比如,100的因數有:1和100,//2和50,4和25,5和20,10和10。看出來沒有。成對的因數,其中一個必然小於等於100的開//平方,另一個大於等於100的開平方。private void comPrime1_2(){System.out.println("小於" + N + "的質數有:");for(int i=N;i>=0;i--){for(int j=2;j<=(int)Math.sqrt(i);j++){if(i%j==0)break;if(j == (int)Math.sqrt(i))System.out.println(i);}}}//篩選法private boolean[] filterNumber(int num){if(num<=0){System.out.println("範圍必須大於0");return null;}boolean[] isPrime = new boolean[num + 1];isPrime[1] = false;Arrays.fill(isPrime,2,num,true);int n = (int)Math.sqrt(num);for(int i=1;i<n;i++){if(isPrime[i]){for(int j=2*i;j<=num;j+=i){isPrime[j]= false;}}}return isPrime;}private void comPrime2(){boolean[] primes= filterNumber(N);int num=0;if(primes!=null){for(int i=1;i<primes.length;i++){if(primes[i]){System.out.println(i+" ");if(++num%10==0)System.out.println();}}System.out.println();}System.out.println("一共有"+num+"個質數");}public static void main(String[] argc){Prime prime = new Prime(100);prime.comPrime2();}}






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.