求解析下面求素数程序

求解析下面求素数程序,第1张

建议你百度下“筛选法”

这里定义了一个数组,用到了a[2]到a[100]

本程序给每一个项,a[i]赋予了两个信息,一个是 i 表一个自然数,一个是a[i]的值,值为1表示 i 是素数,值为0表示 i 不是素数

首先,先初始化所有项,令其值为1

i=2时,a[2]=1,2的倍数不是素数,所以令下标是2的倍数的项值为0(这里 if(a[i]) ,相当于把这个数挖掉了,下次就不管了)

i=3时,a[3]=1,3的倍数不是素数,所以令下标是3的倍数的项值为0

i=4时,由于i=2时,把a[4]的值变为了0, if(a[i]) 为假,pass

i=5时,a[5]=1,5的倍数不是素数,所以令下标是5的倍数的项值为0

………………

k=sqrt(m)for(i=2i<=ki++)if(m%i==0) breakif(i>=k+1) { printf(" %d",m)n=n+1

由以上程序知,k中存储的是m的开平方根值,用以判断循环的结束。或者改用k=m/2也可以;

break是用来跳出for循环的 m有根(被整除),就不用再判断if 语句了。 i>=k+1成立的话,说明m在2---k的范围内没有根,是素数,则有n+1

由每符合条件一次,n的值加一,可知n用来统计素数个数的。

C语言-寻找素数

附代码:

#include<stdio.h>

#include<math.h>

int main()//原理:设ab=c,a<b,则有a<根号c<b。若设a恒小于根号c,则只需判断a是否为因数

{

int a, b

printf("请按从小到大输入两个素数:")

scanf_s("%d %d", &a, &b)

int n = 0,m=0,sum = 0

double i, j//i是从a到b的待筛选数,j是从2到根号i的除数,要判断j是否为i的因数

for (i = ai <= bi++)

{

m = 0

int c = int(pow(i, 0.5))

for (j = 2j <= cj++)

{

if ((i / j - int(i / j)) == 0.0)

{

m++//m是i被从2到根号i的j除了之后,商为整数,即发现j是i的因数的次数

}

}

if (m==0)

{

printf("找到素数:%d\n", int(i))

n++

sum = sum + i

}

}

printf("大于等于%d,小于等于%d的素数的个数为:%d\n", a, b, n)

printf("它们的和为:%d", sum)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7757943.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存