c关于素数的输出。。

来源:互联网 发布:增加勃起硬度知乎 编辑:程序博客网 时间:2024/06/05 11:26

       看到这个题目时,学过c的估计都会轻松一笑,觉得很简

单,不就素数的输出嘛,有什么可说的,但就这么个简单的问

题,可以有多种处理办法,瞬时让自己的逼格升级很多。对于

初学c的朋友们可以借鉴下哦!希望能够共同能够进步。

   一、首先,我们还是先来回顾下素数的概念:

                   素数:是指除了能被1和它本身整除,不能被其它任何整数整除的数

 二、知道了什么是素数,那么接下来就得思考用c语言怎么把

         一个范围内的素数输出来:

           显然,对于一个数我们可以让它去模2到这个数之间的值,如果这个期间有模

来的结果为零,那么它就必然不是素数。

  三、我们举个例子

            例:输出100-200之间的素数。

        #include<stdio.h>
            int main()
           { 
                 int i = 0;

                 int j = 0;
                 for(j = 100; j < 200; j++)   //j表示100-200的素数
                 for(i = 2; i < j; i++)
                      {
                         if(j%i == 0)
                                {
                                    break;
                                }
                        if(i+1 == j)
                           {
                              printf("%d ",j);
                           }  
                     }
                printf("\n");
                return 0;
           }

       这就是我们分析题目后可以写出的最简单的或者说什么都不考虑,顺着思维自然而然的写出来的代码。

      !!! 所以接下来我要说的第四步就是升级逼格,写出让高质量运行效率高的代码。

四、升级逼格(还是上面的例子)

1、我们想一下输出100-200之间的素数,那偶数肯定不是素数啦,那么在循环的时候,我们对于for里面i调整环节即i++可以改成i+2,但是不要忘了i的初始化,就不能为100了,将它改为101,那么这样一来我们把100-200之间的偶数跨过去,效率自然就提高啦。代码就变成了这样:

#include<stdio.h>

int main()


        int i = 0,j = 0;
        for(j = 101;j < 200;j+=2)   //j表示100-200的素数
        for(i = 2;i < j;i++)
       {
               if(j%i == 0)

                      { 

                            break;

                       }
              if(i+1== j)
                      {
                            printf("%d ",j);
                       } 
        }
        printf("\n");
        return 0;
}

2、然后我们有了第一步,接着我们肯定在想还可不可以优化下程序。既然我们有把偶数跨过去,肯定有朋友想到,那也可以将上述中j的范围缩小一半进行查询,即j/2。这个当然很不错,那其实和上面的是一样的道理,不同的方式罢了。那还有方法吗?

这个时候,我们可以想到,既然有除法,那开方行不行呢,当然没问题,是个非常棒的方法呢,省去了很多不必要的重复的循环。这样运行效率就大大提高啦。下面就是我们优化后的代码:

#include<stdio.h>
#include<math.h>
int main()

        int i = 0,j = 0;
        for(j = 101; j < 200; j+=2)   //j表示100-200的素数
             {
                  for(i = 2; i < sqrt(j); i++)
                         {
                            if(j%i == 0)
                                   {
                                        break;
                                   }
                          } 
                            if(i>sqrt(j))
                                {
                                     printf("%d ",j);
                                  } 
             }
        printf("\n");
        return 0;
}

        微笑我想大家应该会有所收获和启发,虽然是小小的程序,可能我们没有办法一次性就写出高质的的最优的代码,但是这篇博客也是给大家一点鼓励,我们不管程序有多大,一步一步进行分析,最终找出最优的方法,写出很棒的代码。

      温馨提示:记得写代码的时候给变量初始化哦!养成好的习惯哟! 吐舌头



0 0