求100到200之间的素数的理解/解答/讲解,简单清晰
非常经典的一题,非常经典的解法
#include<stdio.h>
int main()
{
int x = 100,y=2;
for (x = 100; x <= 200; x++)
{
for (y = 2; y <= x; y++)
{
if (x % y == 0)
break;
}
if (x == y)
printf("%d ", x);
}
return 0;
}
第一步进入for循环:两个for循环构成嵌套循环,把素数的概念(只能被1和它自己整除的数)用代码的形式表达出来,x从100开始逐渐加1,y从2开始逐渐加1,x和y求余数,如果x与y整除,就会跳出循环,跳出循环只有以下两种情况:
①x被小于自己的数整除
②x被等于自己的数整除
遇到上述两种情况,会跳出for循环,因为有y<=x的控制,所以x不会与大于自己的数求余,结合素数的概念,我们要取的是情况②。
第二步进入if判断:进入if,筛选出情况②,如果x=y,说明x被等于自己的数整除了,故x是素数。
举例:当x=150时,它会被y=2整除,但150不等于2,故不输出150。
当x=101(素数)时,它只会被y=101整除,故输出101。
—————————————————————————————————————————————————————————
分享:
一个问题:
for的判断条件里,y<x和y<=x均可以输出正确相同的答案,也就是这两种写法。
按理说,判断条件不同,输出结果就会略有差异。
为了便于观察,将题目改为输出10到20之间的素数。
y<x:当x=11,y=10时,在y<x的临界条件下就会跳出for循环,但跳出时y=10,由于y++先用后加,跳出for循环时y++了一次,但没有执行循环里的内容,所以是由于for里y<x的控制条件跳出循环。
y<=x:当x=11时,此情况下是if(11%11=0),由于break跳出循环。
所以两者输出的结果相同。
dhfnf:
脑子不好真君: 诶,你的宝贝是媛媛
姜龙申: 哇塞哇塞 宝贝太棒了
脑子不好真君: 你好,你的意思是P{X>=2}的时候,我的意思是P{2<=x},我的本意是为了区分出X与x,写得可能不严谨,后面复习类似题我会再来修改,感谢提醒
Gary761203: 第一个解答我怎么觉得是错的呢,题目不是问的x>=2的概率吗?又是离散型随机变量,所以不就应该是x=2的概率吗,就0.4