星星阳 发表于 2016-8-15 13:29:47

代码

/*打印出100到200的全部素数
#include<stdio.h>
#include<math.h>
void main()
{
        int m,k,i,n=0;
        for(m=101;m<=200;m=m+2)
        {
                k=sqrt(m);
                for(i=2;i<=k;i++)
                {
               
                if(m%i==0)break;
               
                }
                if(i>=k+1)
                {
               
                printf("%d\n",m);n=n+1;
               
               
                }
       
        }*/这个代码不知道为什么要这样写,还有为什么是m+2,求大神指教






}

轮回的夏 发表于 2016-8-16 21:48:50

你想想看素数的定义,只能被自己本身和1整除的数,当然不可能是偶数啦,101+1=102,
m+2的话就可以直接去除偶数部分,减轻程序的运算量
如果是很大的程序的话,从头到尾的计算是需要分配更多的内存去计算的,工作量是很大的,所以要学会去除一些本来就可以去除的数。
为了保持帖子的整洁性,你的下一个问题我再发一个帖子给你(不好意思,我有强迫症)

轮回的夏 发表于 2016-8-16 22:07:50

首先,看函数得先从主函数看起,虽然这个函数没有调用其他函数,但是以后遇到一个新的函数的话从主函数看起可以帮助我们认识这个函数的主要功能
上一个帖子,我和你说明了为什么m+2,那我们继续说明接下来的代码
k=sqrt(m);
这个代码的作用其实和m+2的作用是一样,都是起到了筛选的作用,你想想,一个可以开根的数字有可能是素数吗?明显不可能的。筛选过后进入下一个循环,当m不可以被i整除的时候跳出循环在进行判断,i是否大于k+1(这个的话,你可以拿101来做个例子,因为是整型,103开根后等于10,进入循环发现条件都不符合,此时i=11,就符合第二个if语句的条件了然后就打印出来)
那个n起到了计数的作用,虽然你的最后没有写出来,但是可以加上
printf("总共有%d个素数\n");
页: [1]
查看完整版本: 代码