第三周 分析程序题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三周 分析程序题相关的知识,希望对你有一定的参考价值。

 1 using System;  
 2 using System.Collections.Generic;  
 3 using System.Text;  
 4    
 5 namespace FindTheNumber  
 6 {  
 7      class Program  
 8      {  
 9           static void Main(string[] args)  
10           {  
11                int [] rg =  
12                {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,  
13                18,19,20,21,22,23,24,25,26,27,28,29,30,31};  
14    
15                for(Int64 i = 1; i < Int64.MaxValue; i++)  
16                {  
17                     int hit = 0;  
18                     int hit1 = -1;  
19                     int hit2 = -1;  
20                     for (int j = 0; (j < rg.Length) && (hit <= 2); j++)  
21                     {  
22                           if((i % rg[j]) != 0)  
23                           {  
24                                hit++;  
25                                if(hit == 1)  
26                                {  
27                                     hit1 = j;  
28                                }  
29                                else if (hit == 2)  
30                                {  
31                                     hit2 = j;  
32                                }  
33                                else  
34                                     break;   
35    
36                           }  
37                     }  
38    
39                     if((hit == 2) && (hit1 + 1 == hit2))  
40                     {  
41                           Console.WriteLine("found {0}", i);  
42                     }  
43    
44                }  
45           }  
46      }  
47 }   

以上是所给的源代码

一.这个程序要找的是符合什么条件的数?

      该题目所要找的是不能整除2至31的相邻两个数却能整除其他所有数的数。注:由其中的for循环不难看出这段程序的真正目的。

二.这样的数存在么?符合这一条件的最小的数是什么?

      这样的数存在。

      First,对于2至31这30个数,我们可以先将其分为两组。第一组,2至15,因为2至15的2倍均在16至30中,能整除大的数据一定可以整除她的因子,故,我们找最小的符合条件的数据,就应在15至31中去除最小的两个相邻的数,即16和17.

      Second,我们将每一个数都拆分成最小的因子相乘,例,8=2*2*2,9=3*3等等,要得到最小的满足条件的数据,则应使用最少的因子,将所有的数据组合起来。如,8=2*4,2和4就不需要了。在上面的程序中,只要i能整除8,就能整除2和4.

      Last,最后就是要讨论不能被16,17整除的问题了,第二部将所有的因子都列出来,要得到8,至少要3个2,要得到27至少要3个3,要得到25,至少要2个5,其余的素因子都只需一个就够了。

所以,我们得到的最少的因子的组合就是 :2*2*2,3*3*3,5*5,7,11,13,17,19,23,29,31。将他们相乘就得到了最小的符合数据的数:2123581660200

三.在电脑上运行这一程序,你估计要多长时间才能输出第一个结果?时间精确到分钟(电脑配置:单核CPU4.0GHz,内存和硬盘资源充足)

 3.  3~4分钟

4.一个处理器中集成两个或多个完整的计算引擎(内核)多核电脑可以在同时执行几个运算操作,大大提高执行速度。

 

以上是关于第三周 分析程序题的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核分析——第三周学习笔记20135308

Linux内核分析(第三周)

linux内核分析 第三周 构造一个简单的Linux系统MenuOS

《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS

20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

作业第三周作业