读C#程序(第三周)
阅读下面程序,请回答如下问题:
问题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 | ||
3 | 3 | 0 | -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#程序(第三周)的更多相关文章
- 20155203 2016-2017-3 《Java程序设计》第三周学习总结
20155203 2016-2017-3 <Java程序设计>第三周学习总结 教材知识要点总结 第四章 文档主文档名必须与公开类名称相同.一个原始码中可以定义多个类,但是只能有一个公开类. ...
- 程序语言与编程实践7-> Java实操4 | 第三周作业及思路讲解 | 异常处理考察
第三周作业,可能是异常那一章当时没怎么听,此前也不怎么接触,感觉还挺陌生的. 00 第1题 00-1 题目 /* * To change this license header, choose Lic ...
- 1903021121—刘明伟—Java第三周作业—学习在eclipse上创建并运行java程序
项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第三周作业 作业要求 每道题要有题目,代码,截图 扩展阅读 eclipse如何创建java程序 java语言基础(上) 扩展阅读心得: 想 ...
- 20175202 《Java程序设计》第三周学习总结
20175209 2018-2019-2 <Java程序设计>第三周学习总结 教材知识点总结 1.编程语言发展阶段: 面向机器语言——面向过程语言——面向对象语言. 2.类声明: 类名必须 ...
- 20175317 《Java程序设计》第三周学习总结
20175317 <Java程序设计>第三周学习总结 教材学习内容总结 第三周我学习了教材第四章的内容,了解了Java中的部分常用语句,学到了以下内容: 明白了什么是类,成员变量有哪些,什 ...
- 杨其菊201771010134《面向对象程序设计(Java)》第三周学习总结
<面向对象程序设计(Java)>第三周学习总结 第一部分:理论知识 这周课程没有新进度,由于感觉对基础语法的不熟悉,复习了一遍前三章的细碎知识,学到一些之前不知道的原理: 1.计算机高级语 ...
- JAVA 第三周学习总结
20175308 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 本周的学习内容为整个第四章的内容,学习中感觉知识点既多又杂,故在总结时尽量选用重要的或高度概 ...
- 20145312 《Java程序设计》第三周学习总结
20145312 <Java程序设计>第三周学习总结 学习笔记 Chapter 4 4.1类与对象 4.1.1 定义类 1.以服饰设计为例,类定义用class关键词,建立衣服实例要用new ...
- 20144303 《Java程序设计》第三周学习总结
20144303 <Java程序设计>第三周学习总结 教材学习内容总结 •对象是存在的具体实体,具有明确的状态和行为,类是具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属 ...
随机推荐
- moand的编程学形式:一个(高阶)类型包办程序的组织--类型关乎复合
moand的编程学形式:一个(高阶)类型完成程序的组织. 将类型系统的转换与高阶函数进行了融合,相对于链式编程而言. 类型关乎复合 范畴论与箭头的复合有关.但是并非任意两个箭头都可以复合.一个箭头的目 ...
- MYSQL一次千万级连表查询优化(一)
摘自网上学习之用 https://blog.csdn.net/Tim_phper/article/details/78344444 概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的 ...
- docker swarm英文文档学习-7-在集群中管理节点
Manage nodes in a swarm在集群中管理节点 List nodes列举节点 为了查看集群中的节点列表,可以在管理节点中运行docker node ls: $ docker node ...
- day4-课堂笔记
变量 成员变量-构造方法里定义 self.xxx 使用:类内部: self.xxx 类外部: 先创建实例 实例.xxx 类变量 类定义下面直接定义 使用:类方法内 cls.xxx 类名.xxx sel ...
- scrapy的request的meta参数是什么意思?
作者:乌尔班链接:https://www.zhihu.com/question/54773510/answer/146971644来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- WinForm中Component Class、User Control及Custom Control的区别和使用
NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功 能.确定创建何种类型的控件可 ...
- dom4j加载xml文件
## dom4j加载xml文件 ``` // 1. 加载xml文件 InputStream is = MyTest.class.getResourceAsStream("user.xml&q ...
- $Luogu P2029$ 跳舞 题解
一道不是十分水的\(dp\). 首先我们考虑\(dp\)方程的构造.起初我定义的状态是\(dp_{i,j}\)表示前\(i\)个格子,总共跳了\(j\)次的最大得分.但事实上它并不可以转移,因为我们不 ...
- [c.c.a.m.AgentManagerImpl] (AgentConnectTaskPool-39:ctx-c37090c5) Failed to handle host connection: java.lang.IllegalArgumentException: Can't add host: with h
如果无法添加成功,/etc/redhat-release文件覆盖过去 cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)Red H ...
- ceph维护
一个节点挂了,重新添加硬盘并格式化成xfs文件系统挂载到原来的位置后ceph osd无法启动.使用ceph osd tree查看处于down状态.A:移除掉这个osd,1:ceph osd out o ...