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;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-28
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++;}/*打印出所有素数*/
}
第2个回答  推荐于2017-09-24
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++;}/*打印出所有素数*/
}本回答被提问者采纳