c语言中用筛选法求素数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中用筛选法求素数相关的知识,希望对你有一定的参考价值。

编制用筛法求1-n(n≤200)以内素数的程序。
分析:由希腊著名数学家埃拉托色尼提出的所谓“筛法”,步骤如下:
①将所有候选数放入筛中;
②找筛中最小数(必为素数)next,放入集合primes中;
③将next的所有倍数从筛中筛去;
④重复②~④直到筛空。
编程时,用集合变量sieve表示筛子,用集合primes存放所有素数。
源程序如下:
Program ex10_3;
Const
n=200;
var
sieve, primes: set of 2..n;
next, j: integer;
begin
sieve:=[2..n];将所有候选数放入筛中
primes:=[];素数集合置空
next:=2;
repeat
找筛sieve中最小一个数
While not(next in sieve) and (next<=n) do
next:=succ(next);
primes:=primes+[next]; ;将最小数放入素数集合中
将这个素数的倍数从筛中删去
j:=next;
while j<=n do
begin
sieve:=sieve-[j];
j:=j+next ;
end
until sieve=[];
j:=0;
for next:=2 to n do打印出所有素数
if next in primes then
begin
write(next:5);
j:=j+1; ;
If j mod 10 =0 then writeln;
end;
writeln;
end.
谁能把他翻译成C语言啊(要完整的)!!!感激不尽!!

一个质数。在大于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 = 10;I < = n;我+ +)

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

返回0;

参考技术A main()
int
i,j,h,k=0,p[100]=0,a[200]=0;
for(i=1;i<200;i++)a[i]=i+1;/*将所有候选数放入筛中*/
for(i=0;i<200;i++)
for(j=0;j<200;j++)
if(a[i]!=0)
p[k]=a[i];/*将最小数放入素数集合p中*/
for(h=k;h<200;h++)
if(a[h]%p[k]==0)a[h]=0;/*将这个素数的倍数从筛中删去*/
k++;
i=0;
printf("primes:");
while(p[i]!=0)printf("%5d",p[i]);i++;/*打印出所有素数*/
参考技术B main()
int i,j,h,k=0,p[100]=0,a[200]=0;
for(i=1;i<200;i++)a[i]=i+1;/*将所有候选数放入筛中*/
for(i=0;i<200;i++)
for(j=0;j<200;j++)
if(a[i]!=0)
p[k]=a[i];/*将最小数放入素数集合p中*/
for(h=k;h<200;h++)
if(a[h]%p[k]==0)a[h]=0;/*将这个素数的倍数从筛中删去*/
k++;
i=0;
printf("primes:");
while(p[i]!=0)printf("%5d",p[i]);i++;/*打印出所有素数*/
本回答被提问者采纳

数论模板总结 -- 未完待续

// 代码待添加

GCD求最大公约数

 

扩展GCD求ax + by = c 的解以及判断是否有解 -- 当c为gcd(a,b)的倍数

 

Eratosthenes‘s sieve 埃氏筛选法求素数

 

筛选法求1~n欧拉函数值 -- 与埃氏筛选法一样,如果一个数j是i的倍数,那么其欧拉函数值就phi[j] = phi[j] / i * (i - 1) 并标记当前值,同时这也保证了i一定是素数 。当然初始值phi[i] = i

 

以上是关于c语言中用筛选法求素数的主要内容,如果未能解决你的问题,请参考以下文章

埃拉托色尼筛选法求素数

筛选法求素数

筛选法求素数

筛选法求素数

用C++求50~100内的素数,具体问题如下

筛选法求n以内所有的素数