求100------200之间的素数
目录
解析:
所谓素数就是除了1和它本身之外,没有其它因数的自然数;所以根据这个特性,我们在编写这个代码的时候是否有点思路?写两层循环,第一层是100-200的数(暂定i),第二层是1-j-1的数(暂定j);当i%j ==0说明还有其它因数,就不是素数;else全部循环走完一遍都没有,就是素数。
方法1:
1.1注意事项:
我们平时有没有注意?素数好像都是奇数啊!!!根本没有偶数,因为偶数必然能被2整除啊=======》肯定有因数2;所以我们写循环时只要奇数就可以啦,这样可以减少循环次数!!!
1.2下面看具体代码:
1.3代码分析:
1.第一次层循环有没有发现我是从第101数开始的,每次+2就可以完美的避过偶数,只让素数循环;
2.第二层循环,我们取的数是2-----i-1;
3.如果(i%j==0)说明数i有除了1和它本身外的其它因数,既然已经确定它有其它因数了,就没必要继续寻找还有没有其它更多的因数,直接跳出循环;跳出循环后会判断一下此时的数是不是i==j;这是打印的判断条件;如果等于就打印,不等于就不打印;
4.当我们内循环走完,发现都没有数使得(i%j==0);我们同样会去走到判断此时的数是不是i==j;如果等于就打印,不等于就不打印;
1.4总结:
我们还定义了一个计数器count,没打印一个素数就让count++;并且选取的数据是100-200范围比较少的数;为了就是便于后期我们的验证!!!
代码优化:
2.1注意事项:
这个代码是不是还可以继续优化?当然是可以的;我们平常有没再次注意到一个数(暂定为n)的因数必然是<=的?
比如:225===》=15那么以15以分界面,你会发现225所有的因数之中,每一对因数必然有一个是<=15的?=====》例如:45*5=225;一个因数是45,我们不管,但是另外一个因数是5确实是<=15的;是不是很神奇?有了这个想法,我们就可以继续优化我们的代码了!!!
2.2下面看具体代码:
2.3代码分析:
1.想要得到这个数,我们就需要调用库函数sqrt(n)========》头文件是<math.h>
2.嗯?是不是发现我们又定义一个标记变量flag?有什么用呢?
答:当然是为了作为打印结果的条件啊,在第一种方法中我们用的打印条件条件时(i == j);优化后的代码循环只能走到;所以我们就只能想办法寻找另外一种方式====》定义一个标记!!!
3.flag=1初始值赋值为1,写在内循环里,当满足(i%j == 0);我们就把值改为0;如果没有满足,最终flag还是为1,那么这个数就是我们想要的;当内循环结束,外循环+1,开始判断下一个数,flag又再次赋值为1,很巧妙吧!!!
2.4总结:
以上求100-200之间的素数,你学会了吗?有错误欢迎指出!!!
相关文章
- TCP/IP、SOCKET、HTTP之间的联系与区别
- 总结有关IP地址、主机名及MAC三者之间的联系
- 使用System.arraycopy()实现数组之间的复制
- jQuery中的.bind()、.live()和.delegate()之间区别分析
- Open3D (C++) KD tree的使用——可视化近邻搜索点之间的连线
- NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作
- 如何在Windows 10宿主机与Windows 98虚拟机之间共享数据
- 如何在Github网页端处理不同分支之间的冲突
- Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)
- 习题4.1 将学生的学习成绩按不同的分数段分为优、良、中、及格和不及格五个等级,从键盘上输入一个0~100之间的成绩,输出相应的等级。要求用switch语句实现。
- Java并发编程原理: 线程之间的互斥与协作机制
- scp在Linux主机之间复制不用输入密码
- js 获取两个值之间的随机整数
- 3.3 difflib--比较不同序列之间差异库
- Android 中this、getContext()、getApplicationContext()、getApplication()、getBaseContext() 之间的区别
- HMM(隐马尔科夫模型)——本质上就是要预测出股市的隐藏状态(牛市、熊市、震荡、反弹等)和他们之间的转移概率