阅读下面程序,请回答如下问题:

问题1:这个程序要找的是符合什么条件的数?

问题2:这样的数存在么?符合这一条件的最小的数是什么?

问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(电脑:单核CPU 4.0G Hz,内存和硬盘等资源充足)。

问题4:在多核电脑上如何提高这一程序的运行效率?

(注:该程序、用C#语言编写,但是只要有C语言基础完全没有阅读压力,如果对部分语句不懂请自行查询)

要求:将上述问题结果写到博客上。

using System;

using System.Collections.Generic;

using System.Text;

namespace FindTheNumber

{
  class Program
  {
    static void Main(string[] args)
    {
      int [] rg =
          {,,,,,,,,,,,,,,,,,,
           ,,,,,,,,,,,};
      for (Int64 i = ; i < Int64.MaxValue; i++)
      {
        int hit = ;
        int hit1 = -;
        int hit2 = -;
        for (int j = ; (j < rg.Length) && (hit <=) ; j++)
        {
          if ((i % rg[j]) != )
          {
            hit++;
            if (hit == )
            {
              hit1 = j;
            }
            else if (hit == )
            {
              hit2 = j;
            }
            else
              break;
          }         }
        if ((hit == )&& (hit1+==hit2))
        {
          Console.WriteLine("found {0}", i);
        }
      }
    }
  }
}

代码分析:

最初读这个程序的时候不知道Int64的数据范围,谷歌之后范围是-9223372036854775808~+9223372036854775807,

而Int64.MaxValue=+9223372036854775807,程序定义了一个整形数组int [] rg ={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};作为数表。变量i属于[1,9223372036854775807],然后一看这个数这么大,然后直接就把程序给拿去运行了,,,,,然后等了N久,从我早上起床打开电脑,一直运行到我中午回寝室都没出结果。。。。然后我心灰意冷了,决定还是认真用头运行程序吧。。。。。所以目测结果是这样的。。

  i     j     hit   hit1   hit2  hit==2&&hit1+1==hit2
1 0 1 0 -1  
  1 2 0 1  
  2 3 0 1 hit!=2,hit1+1==hit2
2 0 0 -1 -1  
  1 1 1 -1  
  2 2 1 2  
  3 3 1 2 hit!=2,hit1+1==hit2
3 0 1 0 -1  
  1 1 0 -1  
  2 2 0 2  
   -2 hit!=2,hit1+1!=hit2 
.......... .......... ............. .......... ........... ................

更多的就不写了,当我运算到i=5的时候就发现了,

问题1:这个程序要找的是在区间[1,9223372036854775807]内的数,不能被数表rg[]中相邻的两个数整除,但可以被其它28个数整除;

问题2:,,,看见数字这么大,我已经崩溃了,然后谷歌是万能的,得出答案就是16,,17与剩下28个数的最小公倍数答案就是:2123581660200。

问题3:反正我是真的自己运行了,但是没出结果,i要循环2123581660200次,j是根据i为奇偶数而定的,估计10次左右,其他的就不知道了。。

问题4:多核电脑的运行怎么才能提高,作为计算机的学生,说实话我是失败的,对于这些基本的硬件知识我是属于二白的,尽管已经学过计算机组成原理,但好像从讲课开始,都没提到这些东西,然后自己也搜过这些知识,但是总是记不住,,所以就百度找到了一些,也不知道具体能不能行。。http://zhidao.baidu.com/link?url=CvTVizCqNEgtrBOR6CfMGAnncRyKZeI1E29WDiCB_gJN6khwm0lbvuBgnOZNCRE85eBzPCb-ZVeLYY6VCHbWCq

经过这么长时间,看过别人的博客,对于之前的一些问题的补充,看懂了的是别人的,只有自己做过写过才会可能变成自己的,之所以这么久才补充,原因就不提了,

>>>>>对于问题2:曹新宇同学讲解的非常清楚,这是他的博客地址http://www.cnblogs.com/duasonir/p/5301328.html

排除法:在2到31这些数当中,质数有2 3 5 7 11 13 17 19 23 29 31,任意一个大于1的非质数都可以分解成几个数的乘积,而在2-31这些数当中,有很多数都是可以被分解的,比如16=2*2*2*2 , 27=3*3*3 , 25=5*5,2的5次方、3的4次方、5的3次方、7的平方已经超出了31,所以在2-31中,2最大取到4次方,3取到3次方,5取到2次方,7为1次方,而像4,6,8,9,10,12,14,15,18,20,21,22,24,26,28,30都可以被2,3,5当中的数整除,也就相当于没有意义,就剩下核心数7 11 13 16 17 19 23 25 27 29 31,这些数的乘积可以被2-31任意的数整除,我们需要找的数相邻的两个数,只有16,17了,所以8*27*25*7*11*13*1*19*23*29*31=2123581660200,当然这只是最小的数。

>>>>>对于问题3:薛鹏飞同学讲解的让我更容易明白、更支持:http://www.cnblogs.com/yzdd/p/5283887.html

单核CPU4.0G HZ 执行速度为4*10^9/s。(2)外层循环2123581660200次(已最小的数为准)。(3)执行一次%操作用80个CPU周期(http://blog.sina.com.cn/s/blog_65ba9a5e0102v2ih.html)。(4)内层循环次数取决于i,i奇数5次(不能整除2,4),i偶数估计最多执行15次,(方法类似于附录一 2)平均8次。因为i连续增长即i 奇偶交替,所以两种情况取平均值再加上其他判断和赋值语句,得出内层循环次数约为80*(7+5)=960次。(5)总次数=外层*内层(6)执行时间=总次数/每秒执行速度*60=8500min

>>>>>>对于问题4:基本上都是说的优化代码、利用多线程分块执行程序、减少运行程序的数量等等。

读C#程序(第三周)的更多相关文章

  1. 20155203 2016-2017-3 《Java程序设计》第三周学习总结

    20155203 2016-2017-3 <Java程序设计>第三周学习总结 教材知识要点总结 第四章 文档主文档名必须与公开类名称相同.一个原始码中可以定义多个类,但是只能有一个公开类. ...

  2. 程序语言与编程实践7-> Java实操4 | 第三周作业及思路讲解 | 异常处理考察

    第三周作业,可能是异常那一章当时没怎么听,此前也不怎么接触,感觉还挺陌生的. 00 第1题 00-1 题目 /* * To change this license header, choose Lic ...

  3. 1903021121—刘明伟—Java第三周作业—学习在eclipse上创建并运行java程序

    项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第三周作业 作业要求 每道题要有题目,代码,截图 扩展阅读 eclipse如何创建java程序 java语言基础(上) 扩展阅读心得: 想 ...

  4. 20175202 《Java程序设计》第三周学习总结

    20175209 2018-2019-2 <Java程序设计>第三周学习总结 教材知识点总结 1.编程语言发展阶段: 面向机器语言——面向过程语言——面向对象语言. 2.类声明: 类名必须 ...

  5. 20175317 《Java程序设计》第三周学习总结

    20175317 <Java程序设计>第三周学习总结 教材学习内容总结 第三周我学习了教材第四章的内容,了解了Java中的部分常用语句,学到了以下内容: 明白了什么是类,成员变量有哪些,什 ...

  6. 杨其菊201771010134《面向对象程序设计(Java)》第三周学习总结

    <面向对象程序设计(Java)>第三周学习总结 第一部分:理论知识 这周课程没有新进度,由于感觉对基础语法的不熟悉,复习了一遍前三章的细碎知识,学到一些之前不知道的原理: 1.计算机高级语 ...

  7. JAVA 第三周学习总结

    20175308 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 本周的学习内容为整个第四章的内容,学习中感觉知识点既多又杂,故在总结时尽量选用重要的或高度概 ...

  8. 20145312 《Java程序设计》第三周学习总结

    20145312 <Java程序设计>第三周学习总结 学习笔记 Chapter 4 4.1类与对象 4.1.1 定义类 1.以服饰设计为例,类定义用class关键词,建立衣服实例要用new ...

  9. 20144303 《Java程序设计》第三周学习总结

    20144303 <Java程序设计>第三周学习总结 教材学习内容总结 •对象是存在的具体实体,具有明确的状态和行为,类是具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属 ...

随机推荐

  1. 把php session 会话保存到redis

    php的session会话默认时以文件形式保存在php.ini配置文件设置的会话缓存目录,文件保存会话的效率很低,每当每个用户登录一次就会在服务器上生成一个唯一的session_id文件,当用户登录量 ...

  2. post请求体过大导致ngx.req.get_post_args()取不到参数体的问题

    http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size 该地址对于client_body_buf ...

  3. OpenCV——滤波

    常见滤波函数: 其中前3中为线性滤波,后2中为非线性滤波 参考资料:https://mp.weixin.qq.com/s/3maNqlTSkl6FQs_xqrs8Fg

  4. 20175310 《Java程序设计》第1周学习总结(2)

    20175310 <Java程序设计>第1周学习总结(2) 教材学习内容总结 本周学习了教材的第一章内容,通过看微课的方式,自主学习,教材上讲的比较简单,主要的问题都在调试代码上,还有一两 ...

  5. Android分享到微信时点击分享无反应的问题解决(注意事项)

    问题描述:调用分享到微信的sdk点击程序的分享按钮程序无反应 解决办法: 问题原因:微信分享对客户端的要求相当严格,首先你必须在给应用注册账号时,把注册信息相对的填写完整,其中“应用包名”,“应用的签 ...

  6. (二)Lua脚本语言入门(关于函数)

    上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...

  7. memcpy、memmove、memset、memchr、memcmp、strstr详解

    第一部分 综述 memcpy.memmove.memset.memchr.memcmp都是C语言中的库函数,在头文件string.h中.memcpy和memmove的作用是拷贝一定长度的内存的内容,m ...

  8. Deep Photo的TensorFlow版本

    Prisma这个应用,你可能很熟悉.这是一个能将不同的绘画风格,迁移到照片中,形成不同艺术风格的图片. 2017年4月,美国康奈尔大学和Adobe的一个研究团队在arvix上通过论文“Deep Pho ...

  9. 20155226 《网络对抗》exp6信息搜集与漏洞扫描

    20155226 <网络对抗>exp6信息搜集与漏洞扫描 实验后回答问题 哪些组织负责DNS,IP的管理? 目前域名机构主要包括ICANN理事会和CNNIC. Internet 域名与地址 ...

  10. 2017-2018-1 20155320 嵌入式C语言——时钟

    2017-2018-1 20155320 嵌入式C语言--时钟 要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清 ...