求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跳出循环。

所以两者输出的结果相同。

如有错误望指正。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用以下代码来100200之间素数: ```matlab for i = 100:200 is_prime = true; % 假设i是素数 for j = 2:sqrt(i) if mod(i, j) == % 如果i能被j整除 is_prime = false; % i不是素数 break; % 跳出循环 end end if is_prime % 如果i是素数 disp(i); % 输出i end end ``` 运行以上代码后,会输出100200之间素数,结果如下: ``` 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 ``` ### 回答2: 素数是只能被1和本身整除的正整数,因此可以编写一个程序来判断每个数字是否为素数,从而100200之间素数。 首先,可以定义一个从2到n-1的循环,如果有一个数m可以整除n,则n不是素数。如果没有,那么n是素数。 接下来,可以编写一个循环来遍历100200之间的数字,并将每个数字分别传递给素数判断函数。如果该函数返回True,即该数字是素数,就将其打印出来。 下面是一段可以实现这个功能的Matlab代码: function result = is_prime(n) % 素数判断函数 for i = 2:(n-1) if mod(n,i) == 0 result = false; return end end result = true; end for i = 100:200 if is_prime(i) disp(i); end end 这段代码定义了一个名为is_prime的函数,可以接受一个正整数n,并返回一个布尔值表示它是否为素数。 然后使用for循环,遍历100200之间的数字,并将每个数字传递给is_prime函数。如果该函数返回True,则将该数字打印出来。 这段代码可以快速有效地找出100200之间素数,实现了迅速素数的功能。 ### 回答3: 题目中「100200之间素数」其实就是一个素数的问题。素数可以简单地定义为只能被1和自身整除的自然数。那么,我们可以利用这个性质来判断100200之间的每个自然数是否为素数。 用matlab编写素数的程序,可以采用两种方法:暴力法和筛法。暴力法很简单,就是逐个判断每个自然数是否能被2到自身的前一个数整除。但这个方法在数据规模较大时非常耗时,因此通常采用筛法。 筛法的思想很简单,就是从小到大依次枚举每个自然数,如果是素数,则将其所有倍数都标记为合数,然后继续枚举下一个数。这样直到枚举完所有的自然数,所有未被标记的数就是素数。而对于100200之间的自然数,我们可以从2一直枚举到200,对于每个数再依次判断是否满足素数定义。 编写程序时,我们可以采用循环嵌套的方式,比如大循环从100开始到200结束,小循环判断每个数是否为素数。具体实现代码如下: ```matlab for x=100:200 %枚举100200间的每个自然数 is_prime=true; %假设当前数是素数,置标志位为true for i=2:sqrt(x) %从2开始枚举到sqrt(x) if mod(x,i)==0 %如果能被整除,则说明不是素数 is_prime=false; %修改标志位 break; %跳出循环 end end if is_prime %如果标志位仍然为true,则输出当前数 disp(x) end end ``` 运行程序,即可得到100200之间的所有素数。程序中的sqrt函数表示平方根,而mod函数表示余数。其中,标志位is_prime初始值设置为true,只有在中间发现当前数能够被整除,才把它设置为false。最后,如果is_prime仍为true,则说明该数为素数,输出即可。 需要注意的是,当x=2时,循环不会进入到小循环,这是因为2是素数,所以我们可以手动输出2这个特殊的素数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑子不好真君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值