算法練習:找到100以內的所有素數(質數)


  1             /*************************************
  2              *  
  3              *  20180127凌晨0:45
  4              *  
  5              *  太冷了最近 ,晚上睡不着覺,做做題目吧
  6              * 
  7              *  找到100以內的所有素數(質數)
  8              *  
  9              *  
 10              *  
 11              *  
 12              *  先來看下質數的定義:只有1和它本身兩個因數的自然數
 13              *  
 14              *  如果將所有質數從小到大依次排列,那么根據定義就可以知道2是第一個質數
 15              * 
 16              *  我們將從小到大依次排列所有質數的集合記為 集合 A = {2,,......}
 17              *  
 18              *  集合 A 里面元素的個數為 N,因為有無限個質數,毫無疑問 N 的值也無窮大
 19              *  
 20              *  現在我們已經知道了1個A集合中的元素 A[0]=2 ,我們把已經找到的素數個數記為 n+1,目前 n=0
 21              *  
 22              *  
 23              *  
 24              *  無限的東西,我們的計算機無法再有限的時間里面對其進行計算
 25              *  
 26              *  因此,我們把給要解決的問題一些約束條件:找到 m 及以內的所有素數, 
 27              *  
 28              *  m為不小於2的自然數,此處暫定 m = 100。
 29              *  
 30              *  
 31              *  現在我們已經把所有信息抽象化進行定義了,我們重新來梳理一遍所有定義
 32              *  
 33              *  A :從小到大依次排列所有質數的集合
 34              *  
 35              *  A[0] : A集合中第一個元素的值,A[0]=2
 36              *  
 37              *  n+1 :已經知道了A集合中的元素的個數,n初始時值為0
 38              *  
 39              *  m :值為100
 40              *  
 41              *  i : 變量,       i 的區間為 [2,m]
 42              *  
 43              *  j : 變量, j的區間范圍為 [0,n)
 44              *  
 45              *  
 46              *  所有數學問題,都是可以被抽象化定義的,其次是可被計算的
 47              *  
 48              *  接下來我們看想計算方法
 49              *  
 50              *  根據質數的性質,我們可以有以下推論:如果一個數不能被它之前的任何質數整除,那么它自己也是一個質數
 51              *  
 52              *  換句話說,一個數能被它之前的任何質數整除,那么它就不是質數,不能被它之前的任何質數整除的數是質數
 53              *  
 54              *  因此 我們只要將當前自然數 i 與小於它 的 所有已知的 n 個質數整除便可判定
 55              *  
 56              *  
 57              *  
 58              * 
 59              ************************************/
 60 
 61 
 62             int[] A = new int[100];             //質數集合
 63             A[0] = 2;
 64             int n = 0;
 65             int m = 100;
 66             int i, j;
 67 
 68             Console.WriteLine("{0}", A[n]); //輸出第一個質數
 69 
 70             i = 3;
 71             while (i <= m)
 72             {
 73                 j = 0;
 74                 while (j <= n)
 75                 {
 76                     if (i % A[j] == 0)
 77                     {
 78                         //一個數能被它之前的任何質數整除,那么它就不是質數
 79                         break;
 80                     }
 81                     else
 82                     {
 83                         //與下一個素數除余
 84                         j++;
 85 
 86                         if (j > n)  
 87                         {
 88                             //不能被它之前的任何質數整除的數是質數
 89                             n++;
 90                             A[n] = i;
 91                             Console.WriteLine("{0}", A[n]);
 92                         }
 93                     }
 94                 }
 95                 i++;
 96             }
 97 
 98 
 99 
100 
101 
102             Console.ReadKey();
103 
104             /****
105              *  20180126 凌晨1:56
106              *  
107              *  寫完了,睡覺
108              * 
109              * 
110              * ****/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM