首页 > 代码库 > (20140707作业)一入IT深似海,从此节操是路人!~9*9乘法表&千以内素数

(20140707作业)一入IT深似海,从此节操是路人!~9*9乘法表&千以内素数

这是我们老大培训第一天的作业,今后几乎左右的作业都会记录在这。

2014-07-07

要求:

C#基本语法实现 九九乘法表 和1000以内所有质数

 

几个新手同事,有刚毕业的学生,有做机电出身,也有硬件做硬件的。

大家可能想法不一,所以集思广益,对于好的思路,我这里借鉴并留存。 

 

大铿的代码:

 1 //求 千以内的素数 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7  8 namespace sushu 9 {10     class Program11     {12         static void Main(string[] args)13         {14             DateTime d1 = System.DateTime.Now;   //运行的当前时间15             Console.WriteLine("开始时间是:{0}", d1);16             Console.WriteLine();17 18             int n = 10000;   //定义范围19             int m = 0;20             bool t=false;    //定义因数存在变量,初始为false21             int count = 0;    //统计个数的变量22             23             for (int i = 1; i <= n; i++)24             {25                 if (i == 2 || i == 3)   //处理 2 326                 {27                     count = count + 1;28                     Console.Write("{0}  ", i);29                 }30                31                 if(i%2!=0)     //排除偶数32                 {33                                       34                     for (int a = 2; a <= i/2; a++)   //处理除 1 以外的因数(如果存在因数,必然会存在一个小于n/2因数)35                     {36                         t = false;   37                         m = i % a;38                         if (m == 0)39                             break;    //整除退出循环40                         else41                             t = true;   //关键标识42                     }43 44                     if (t == true)   //判断质数,然后输出,统计个数45                     {46                         count = count + 1;47                         Console.Write("{0}  ", i);48                         if (count%12==0)        //输出数字排版 12列49                         {50                             Console.WriteLine();51                         }52                     }53                     54                 }55                 56             }57             Console.WriteLine();58             Console.WriteLine("{0}以内的质数个数总数是:  {1}", n, count);  //输出质数统计59             Console.WriteLine();60             TimeSpan ts = DateTime.Now - d1; //获取当前时间并计算耗时61             Console.WriteLine("耗时:{0}秒,{1}毫秒",ts.Seconds,ts.Milliseconds);  //输出耗时数据62             63 64             Console.ReadKey();65 66         }67     }68 }
View Code

 

老大点评:(这里仅仅按照我当时所理解去记录,原话已经记不太清了)

其优点在于尽量减少循环次数,排除一定的非质数。

 

小勇的代码:

 1  static void Main(string[] args) 2  3         { 4              5             int i=0, j = 0; 6             for (i = 3; i <= 10000; i = i + 2)//i+2 把偶素去掉,减少运算量 7            { 8                //   再次减少运算量,合素分解,必有其最小因数小于或等于合数的开根号 9                 int k = (int)Math.Sqrt(i);10                 for (j = 2; j <= k; j++)11                 {12                     //判断素数13                     if ((i % j) == 0)14                     {15                         break;16                     }17                 }18                 //如果j<k,说明没有判断完,送回去再判断19                 if (j > k)20                {21                     Console.Write(i.ToString() + " ");22                 }23             }24            Console.Read();25             26         }
View Code

 

这里用了 一个数学方法 (开方):

 1 int k = (int)Math.Sqrt(i); 

 

问过老大这个运行起来的效率,得到的回复是这个函数 运用的是中国古代一种很牛X的算法(具体不记得),但是速度是最慢的。