搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 编程范 > 【编程经验】优秀题解

【编程经验】优秀题解

编程范 2018-07-09

点击蓝字

【编程经验】优秀题解

解题思路:


       定义一个数组prime[],赋初值为0,数组下表对应这个数字,通过数组值来判断是否为素数

ex:

1

   

    prime[2]==0 表示2为素数  prime[8]==1 表示8不为素数

   

       

    根据算术基本定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积

            所以若prime[i]==0,则prime[i*j]==1 即prime[i*j]不为素数

        只要i:2->n 即可构建n以内的质数表

注意事项:
               prime[0]=prime[1]=1;    //0 1特殊处理

   

参考代码:


#include<stdio.h>

int main(){

     int prime[10000]={0};

     int i,j;

     int n;

  

     scanf("%d",&n);

  

     prime[0]=prime[1]=1;

  

     for(i=2;i<n;i++)

         if(prime[i]==0)

               for(j=2;i*j<=n;j++)

                    prime[i*j]=1;

  

     for(i=0;i<n;i++)

          if(prime[i]==0)

               printf("%d\n",i);

  

     return 0;

}

   


下面是另一种求素数方法

#include<stdio.h>

#include<math.h>

  

void judge(int n);

//----------------------------*

int main(void){

      int n,i;

      scanf("%d",&n);

      for(i=2;i<=n;i++)

          if(i%2!=0)        //去偶数

            judge(i);

      return 0;

}

//----------------------------*

void judge(int n){ 

     int i,flag=0;

     double sq;

     sq=sqrt(n);        //减少开根运算

     for( i=2;i<=sq;i++)     //因数都是成对存在的 而且因数对一定是一大一小(除平方根)

       if(n%i==0){

            flag=1;

            break;

           }

     if(flag==0)

         printf("%d\n",n);

}

   




点击“阅读原文”获取原文链接。




版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【编程经验】优秀题解》的版权归原作者「编程范」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注编程范微信公众号

编程范微信公众号:dotcpp

编程范

手机扫描上方二维码即可关注编程范微信公众号

编程范最新文章

精品公众号随机推荐