zoukankan      html  css  js  c++  java
  • 软件工程 第三周 作业(二)

      问题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:

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

  • 相关阅读:
    Redis安装过程
    TDDL-剖析淘宝TDDL
    jQuery 遍历
    util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
    util-判断当前年份所处的季度,并返回当前季度开始的月份
    省市区(县)三级联动代码(js 数据源)
    JS:实用功能
    C#常用格式输出
    算术运算符
    C# 中的结构类型(struct type)
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/5296114.html
Copyright © 2011-2022 走看看