小题求速解,关于素数!
以下程序目的:统计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 请按任意键继续. . .
-----------------------