c语言-输出100以内的素数-break;的用法为什么会有这个 if(i>=n)

来源:百度知道 编辑:UC知道 时间:2024/07/08 09:18:57
/*输出100以内的素数*/
#include<stdio.h>
void main()
{
int n,i;
for(n=2;n<=100;n++)
{
for(i=2;i<n;i++)
if(n%i==0) break;
if(i>=n)
printf("\t%d",n);
}
}
我想问的是 if(i>=n) 是什么意思 怎么来的 可以用其他式子代替吗

每次从if(n%i==0) break;循环里逃出来循环都能有2中结果,一、被i整除了,直接被BREAK跳出i循环,这时程序还会往下跑,就有必要遮挡下对n的打印(我们只要打印素数),i这时肯定小于n,利用if(i>=n)就能过滤掉。二、当n为素数时,这时的i一直循环到了n结束,这时的i肯定等于n,这样就要通过 i>=n 来打印。如果把 if(i>=n) 去掉,显然会把所有的n都打印一遍
其中>=可以用==代替,这是因为i循环的顶值被限在了n,能从i循环出来的i 不是小于n就只能等于n

if(i>=n)的意思是判断被除数是否小于除数,如果小于当然是不用再进行下去了。这个式子写成if(i>=n/2)更好,可以少算几步。

你先观察上一个循环,诺n是个合数,则该循环跳出时i的值小于n;诺n是质数则循环将在i=n时结束,故 if(i>=n)该式为真,将其打印出来。
该语句没有太好的改进方法,至多只能改为if(i==n)
但这没有实际意义。
程序改成这样会更好一些:
#include<stdio.h>
#include<math.h>
void main()
{
int n,i,k;
for(n=2;n<=100;n++)
{ k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0) break;
if(i>=k)
printf(" %d",n);}
}

for(i=2;i<n;i++)
if(n%i==0) break;

if(i>=n)
printf("\t%d",n);

上面是判断n是不是有其他的除数的。
可以改成for(i=2;i<sqre(n);i++)if(n%i==0) break;//sqre()是开平方的函数

这个循环如果中途执行 break跳