首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小题求速解,关于素数!解决方案

2012-02-20 
小题求速解,关于素数!以下程序目的:统计100个数内素数的个数,及显示出他们分别是多少。#includestdio.h#i

小题求速解,关于素数!
以下程序目的:统计100个数内素数的个数,及显示出他们分别是多少。
#include   <stdio.h>
#include   <stdlib.h>
#include   <math.h>
int   main()
{
        int   m,i,k,h=0,leap=1;
        printf   ( "\n ");
        for   (m=101;m <=200;m++)
                {
                                                    k=int   (sqrt(m+1));
                                                    for   (i=2;i <=k;i++)
                                                            if   (m%i==0)
                                                                  {leap=0;}
                                                            if   (leap)       /*此处不明白,个人觉得他的意思是if   leap为真,则进行下面的步骤。不知我的想法对不对。*/
                                                                  {printf   ( "%d\n ",m);
                                                                    h++   ;  
                                                                    }
                                                    leap=1;       /*这里不明白为什么leap要再次赋值为1.*/
                                                    }
    printf   ( "h=%d ",h);                    
    system   ( "PAUSE ");
    return   0;
}


[解决办法]
/*此处不明白,个人觉得他的意思是if leap为真,则进行下面的步骤。不知我的想法对不对。*/
————————————————————————————————————
是的。。。

leap=1; /*这里不明白为什么leap要再次赋值为1.*/
——————————————————————————————
把标志还原,比如说m=102的时候,leap为0,不是素数,不打印。然后m为103,如果你不把这个标志还原为1,那它还是0,103这个素数还是打印不出来。
[解决办法]
简单点写:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
int m,i,k,h=0,leap=1;
for (m=101;m <=200;m++)
{ leap = 1; /* 每次外循环开始都设leap为1 */
k=(int)(sqrt(m));
for (i=2;i <=k;i++)
{

if (m%i==0)
{leap=0; break;} /* 当m不是素数时,用leap=0来作个标记,并且退出内循环 */

}
if (leap == 1) /* 内循环结束可以,通过leap是否为1来判断是否素数 */
printf ( "%-5d ",m);
}
system ( "PAUSE ");
return 0;
}

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179
181 191 193 197 199 请按任意键继续. . .
-----------------------

热点排行