编制用筛法求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;
}