• 算法练习:找到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              * ****/
  • 相关阅读:
    [Clr via C#读书笔记]Cp4类型基础
    [Clr via C#读书笔记]Cp3共享程序集和强命名程
    [Clr via C#读书笔记]Cp2生成打包部署和管理应用程序和类型
    [Clr via C#读书笔记]Cp1CLR执行模型
    试用Markdown来写东西
    字符编码的总结
    常去的网站
    Click Once使用总结
    【LevelDB源码阅读】Slice
    【程序员面试金典】面试题 01.05. 一次编辑
  • 原文地址:https://www.cnblogs.com/aiyauto/p/8363612.html
Copyright © 2020-2023  润新知