我写了个找1~100的素数的程序,运算结果却让我百思不得其解,为啥会这样的
有两个地方错了,见 (1) 和 (2) 的注释。#include \u0026lt;stdio.h\u0026gt;int main(){ int a = 1, i, k; /*x是范围 即判断0~x内的素数*/ for (i = 2; i \u0026lt;= 100; i++, a = 1) { for (k = 2; k \u0026lt; i; k++) // (1) 这里,并非 k \u0026lt;= i { if (i % k == 0) { a = 0; break; } } if (a == 1) // (2) 需要将这个判断提取出来 printf("%d是素数\", i); } printf("判断完毕,以上是结果"); getchar(); getchar();} 【我写了个找1~100的素数的程序,运算结果却让我百思不得其解,为啥会这样的】 最后说明一下,这个程序写得是不好的。我只是按照原来题目来修改,正确的做法,是将判断素数的代码抽取出来做成函数。
■网友
错误前面的人已经改了,我有一个好用的办法。任何合数都能拆成素数,所以不用在全部数里面找因数,只用在素数里面找因数就可以了。比如你遍历到29了,这个时候你的素数数组里面就有{2,3,5,7,11,13,17,19,23},因为7\u0026gt;sqrt(29)所以你只需要看{2,3,5}是不是29的因数,如果不是就把29放到素数数组里面,如果是就遍历30。。。
■网友
你这逻辑很有问题啊。比如说25,除2,3,4的时候都会跳进第二个if,然后输出三遍25是素数,除5的时候跳进第一个if,break。判断素数应该是除完2\u0026lt;=k\u0026lt;=根号i取整(不是i)中的每个数还没有break,a还等于1,才判断它为素数;而不是每除一个数判断一次。那你在除到第一个约数之前除了几个数就会输出几次。
推荐阅读
- 北京空气达标天数较2013年增加100天
- 西南地区最大再生水厂完成提标改造每日可生产100万吨再生水
- 浙江舟山破获一起烟草类特大非法经营案涉案1000余万元
- 1-11月河北入海口断面水质达标率100%
- 河北承德持续改善水环境质量水质达标率100%
- 河北承德危险废物综合利用处置率达100%
- 电动车第一线|电动车配多大的电池,可以跑100公里以上?师傅告诉你真实答案!
- 大秦赋|等了1000多天,终于等到了
- 海西商界|周杰伦代言12年!这家中国电动小摩托,13年卖出4100万辆
- 100W——150W有啥好的车
