黑马程序员技术交流社区
标题: 关于判断素数的问题 [打印本页]
作者: 牛牛很牛 时间: 2016-6-2 10:37
标题: 关于判断素数的问题
本帖最后由 牛牛很牛 于 2016-6-2 10:54 编辑
#include<stdio.h>
#include<math.h>
void main()
{
int m,i,k;
printf("请输入一个整数:");
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++) //for循环的循环范围从哪到哪 为何不加大括号?(加大括号反而运算结果有误)
if(m%i==0) //有何含义
break; //这一步判断完后break难道不是结束程序吗
if(i>k) //这个判断有何含义
printf("%d 是素数。\n",m);
else
printf("%d 不是素数。\n",m);
}
以上是我不懂的地方,望大神不吝赐教,多谢多谢!
作者: VamCriss 时间: 2016-6-3 23:08
我也只是说下我的看法
首先是for循环的范围。就是下面这一块
for(i=2;i<=k;i++)
if(m%i==0) //含义:m%i是取余数,素数的定义是只能被1和自己整出,也就是说除以其他数的余数都不为0,如果余数为0,那这个数自然不是素数,那么也就没有必要再去除以后面的数,而执行break跳出循环
break; //break是跳出当前的循环语句,不是结束程序
大括号起的作用主要就是划分区域用的,其实,你可以这样理解,一个大括号里的内容就是一条语句,普通的语句是以分号结尾的,这段代码for循环下整体就只有if这一个判断一句,break语句是属于if这个这个判断语句的。
if(i>k) //前面的for循环代码,当i取值0至k-1都不能使m%i余数为0,接下来判断 i=k时的余数,如果不为0,那这数就是素数,但此时for循环还没有结束,在再执行一次i++后才结束,那么此时的i就比k要大,而且最多大1
作者: 牛牛很牛 时间: 2016-6-4 21:16
多谢
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |