电竞比分网-中国电竞赛事及体育赛事平台

分享

使用java.util.BitSet 求素數的算法

 橙zc 2014-09-25

找出100以內的素數
素數定義:質數,又稱素數,指在一個大于1的自然數中,
除了1和此整數自身外,無法被其他自然數整除的數(也可定義為只有1和本身兩個因數的數)。

使用java.util.BitSet求素數的算法:
例如要找100以內的素數,
1,聲明一個BitSet bs,第0,1位置false;其余位是true。
2,從2開始遍歷bs,如果是true就進行內循環(huán)遍歷。
3,內循環(huán)遍歷:從外向內環(huán)i開始遍歷bs,每次增長一個i(這個很重要),把內循環(huán)j在bs中的位置成false。
代碼如下
for(int i=0;i<bs.size();i++){
 if(bs.get(i)){
  //內循環(huán)遍歷
  for(int j=2*i;j<bs.size();j+=i){
   bs.set(j, false);
  }
 }
}
(因為素數只能被1和它本身整出,所以就把事它2倍,3倍,4倍....的數全過濾掉)

[html] view plaincopy
  1. package com;  
  2.   
  3. import java.util.BitSet;  
  4.   
  5. public class mianTestSix {  
  6.   
  7.     /**  
  8.      * @param args  
  9.      */  
  10.     public static void main(String[] args) {  
  11.         BitSet bs=new BitSet(100);  
  12.         initBitSet(bs);  
  13.         findSushuBitSet(bs);  
  14.         printSushuBitSet(bs);  
  15.     }  
  16.       
  17.     //第0,1位置成false,其余全部是true.  
  18.     public static void initBitSet(BitSet bs){  
  19.         for(int i=0;i<bs.size();i++){  
  20.             if(i==0||i==1){  
  21.                 bs.set(i, false);  
  22.             }else{  
  23.                 bs.set(i, true);  
  24.             }  
  25.         }  
  26.     }  
  27.     //處理數據,找到素數  
  28.     public static void findSushuBitSet(BitSet bs){  
  29.         for(int i=0;i<bs.size();i++){  
  30.             if(bs.get(i)){  
  31.                 //內循環(huán)遍歷  
  32.                 for(int j=2*i;j<bs.size();j+=i){  
  33.                     bs.set(j, false);  
  34.                 }  
  35.             }  
  36.               
  37.         }  
  38.     }  
  39.     //位是1的是素數,打印  
  40.     public static void printSushuBitSet(BitSet bs){  
  41.         StringBuffer buf=new StringBuffer();  
  42.         int num=0;  
  43.         for(int i=0;i<100;i++){  
  44.             if(bs.get(i)){  
  45.                 buf.append(i+",");  
  46.                 num++;  
  47.             }  
  48.               
  49.             if((num+1)%20==0&&num!=0){  
  50.                 buf.append("\n");  
  51.             }  
  52.         }  
  53.         System.out.println(buf.toString());  
  54.     }  
  55.       
  56.   
  57. }  


 


輸出:

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,

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多