码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程 第三周 作业(二)

时间:2016-03-19 20:56:40      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

  问题1:

  

for (Int64 i = 1; i < Int64.MaxValue; i++)
      {
        int hit = 0;
        int hit1 = -1;
        int hit2 = -1;
        for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
        {
          if ((i % rg[j]) != 0)
          {
            hit++;
            if (hit == 1)
            {
              hit1 = j;
            }
            else if (hit == 2)
            {
              hit2 = j;
            }
            else
              break;
          }

        }
        if ((hit == 2)&& (hit1+1==hit2))

  由此段代码知,程序要在0~2的64次幂中选出一个数

  1.这个数i无法被数组中连续的两个数整除。

  2.数组中除了这两个连续的数都可以将i整除

  这便是程序寻找的数符合的条件

 

  问题2:

  如果i不能被数组中的一个数a整除,那么他也不能被a的倍数(同属于该数组)整除,当a>1时,这a与a的整数倍(最小是2a)便不会是连续的两个数

这样便不满足问题1中的条件,所以要找到i对应的两个属于数组的数,就应该排除掉a这种数,数组中小于16的数都满足该条件,所以将16之前的数都排

除掉。

  对于剩下的数,质数不作处理,将合数进行拆分,以寻找能不被其他数最小公倍数整除的合数。剩下11个合数,也就是说只要求出是个合数的最小公倍

数,然后看能否被剩下的合数整除,分别求10次,来找出符合要求的合数,如果他与一个质数相连,则符合条件。经计算,最后16,17符合要求。除去16

17,剩下数数的公倍数为2123581660200。

  问题3:

  

for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
        {
          if ((i % rg[j]) != 0)
          {
            hit++;
            if (hit == 1)
            {
              hit1 = j;
            }
            else if (hit == 2)
            {
              hit2 = j;
            }
            else
              break;
          }
          

  我认为直到hit>2时跳出里层循环,循每次环的次数都是不一样的,而且不好估计均值,只知道外层循环循环了2123581660200次

所以我认为无法精确求出运行时间。

 

  问题4:

  多核电脑在循环时可以同时执行几步,效率要比单核快得多。

软件工程 第三周 作业(二)

标签:

原文地址:http://www.cnblogs.com/wangtianning1223/p/5296114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!