C语言中判断m是否素数

来源:百度知道 编辑:UC知道 时间:2024/06/02 22:01:32
#include<math.h>
main()
{
int m,i,k;
scanf(“%d”,&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
printf(“%d is a prime number\n”,m);
else
printf(“%d is not a prime number\n”,m);
}

这里面我有几个问题。
1).for(i=2;i<=k;i++)的意思应该是i最多自加到等于K的时候就结束循环了吧,也就是不自加了吧。所以这后面的if(i>=k+1)还有什么意义呢?因为i就不可能会自加到k=1。
2).break是只要满足条件的话,就结束跳出循环,进入循环的下一个语句。
if(i>=k+1)
printf(“%d is a prime number\n”,m); 应该也不是属于for(i=2;i<=k;i++)这个循环的呀,应该也算是break所在循环的下一个语句
那么它为什么是输出printf(“%d is not a prime number\n”,m); 而不是printf(“%d is a prime number\n”,m); 呢,

循环结束时为i<=k不成立,即i=k+1;
if(i>=k+1)的意义是判断是否break出循环,i<=k为break情况下退出的循环,反之为正常情况下退出循环;

1,当I=K时,条件也成立,那么i++,下次判断当i>k时循环停止,这后面的if是输出条件判断语句。
这儿的for语句后面没有{ },也就是这儿的for只是满足if(m%i==0)break;在这儿for循环完后再进入下一语句