黑马程序员技术交流社区

标题: 关于判断素数的问题 [打印本页]

作者: 牛牛很牛    时间: 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
VamCriss 发表于 2016-6-3 23:08
我也只是说下我的看法
首先是for循环的范围。就是下面这一块

多谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2