前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【编程经验】优秀题解

【编程经验】优秀题解

作者头像
编程范 源代码公司
发布2018-07-24 17:04:52
2990
发布2018-07-24 17:04:52
举报

解题思路:

定义一个数组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);

}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档