c语言中用筛选法求素数

c语言中用筛选法求素数,第1张

一个质数。在大于1的自然数谈塌中,除1和100整数本身外,不能被任何其他自然数整除的次数。素数在数论中起着重要的作用。

大于余笑1但没有质数通道的数称为合数。1和0既不是质数也不是合数。

通过滤波法得到的100以内质数的源代码如下:

#include"stdio.h"

main()

main()

IntI,j。

对于(I = 2我<99我+ +)

对于(j = 2<我J + +)

If(I%j==0)

打破;

如果(j==I-1)

Printf(“%4d”,I);

扩展资料:

100以内的数字代码如下

包含<bits/stdc++。H >

使用命名空间性病。

Intthesum(Intn)

返回(n/10+含毁圆n%10%)+(10)(n/10%*(n%10));

Intmain(){

Intn=100;

For (int I = 10I <= n我+ +)

If (sum (I) = = I) cout <<I <<endl

返回0;

筛法求素数的方法如下:

用筛法求素数的基本思想是:把从2到N的一组正整数从小到大按顺序排列。从中依次删除2的倍数、3的倍数、5的倍数,直到根号N的倍数为止,剩余的即为2~N之间的所有素数。如有:

2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

去掉2的渣举倍数(不包括2),余下的数是:

3 5 7 9 11 13 15 17 19 21 23 25 27 29

剩下的数中3最小,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:

2 3 5 7 11 13 17 19 23 29

筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。段穗2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。

3后面第一个没划去的数是5,把5留下,如燃碧再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂蜡的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后。

这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。)

源代码如下:

#include <stdio.h>

#include <math.h>

int main()

{

int a, b, i, flag

printf("输入两个整数: "毁友)

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

printf("%d与%d之间的素数为: ", a, b)

while(a<b)

{

flag=0

for(i=2i<=sqrt(a)i++)

{

if(a%i==0)

{

flag=1

break

}

}

if(flag==0)

printf("%d ", a)

a++

}

return 0

}

扩展资料

一个偶数总能表示为两行哗个素数之和的源代码如下:档余行

#include "stdio.h"

#include "math.h"

main()

{

int a,b,c,d

scanf("%d",&a)

for(b=3b<=a/2b+=2)

{

for(c=2c<=sqrt(b)c++)

if(b%c==0) break

if(c>sqrt(b))

d=a-b

else

break

for(c=2c<=sqrt(d)c++)

if(d%c==0)

break

if(c>sqrt(d))

printf("%d=%d+%d\n",a,b,d)

}

}

for(int i=5i<=sqrt(x)i+=6)

if(x%i==0||x%(i+2)==0)

{

printf("%d不是素数",x)

return 0

}

printf("%d是素数",x)

return 0

}


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

原文地址: https://outofmemory.cn/yw/12539491.html

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

发表评论

登录后才能评论

评论列表(0条)

保存