Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 38


FOR I=0 TO MAXK IF ISI(I)=l THEN

'если число еще не "проколото"

PRIME=I+I+3: ' сформировали очередное простое число

N=N+1: ' увеличили счетчик простых чисел

PRINT USING "#####";

PRIME; : ' вывод очередного простого числа

K=I+PRIME: ' индекс для первого "прокола"

WHILE К<=МAХК

REM "проколы" чисел, делящихся на

PRIME IS1(K)=0: K=K+PRIME

WEND

END IF

NEXT I

PRINT

PRINT "Среди первых ";МАХК+1; " нечетных чисел";

PRINT " найдено "; N; " простых"

END

Программа 2_22.с

#include <stdio.h>

#include <conio.h>

#define maxk 500

main() {

int pr_num,n=0;

char is[maxk+1];

register int i,k;

clrscr () ;

for(i=0; i<=maxk; i++) is[i]=l; /* все числа "на папирусе" */

for(i=0; i<=maxk; i++)

{if(is[i]==l) /* если число еще не "проколото" */

{ pr_num=i+i+3; /* сформировали очередное простое число */

n++; /* увеличили счетчик простых чисел */

printf("%5d",pr_num); /* вывод очередного простого имела */

k=i+pr num; /* индекс для первого "прокола" */

while (К<:=mахk)

{

/* "проколы" чисел, делящихся на pr_num */

is[k]=0; k+=pr_num;

}

}

}

printf("\nСреди первых %d нечетных чисел", maxk+1);

printf("найдено %d простых", n);

getch();

}

Программа 2_22.pas

program sievel;

uses Crt;

const

maxk=500;

n:integer=0;

var

is: array [0..maxk] of byte;

i,k,prime:integer;

begin clrscr;

for i:=0 to maxk do is[i]:=1; { все числа "на папирусе" }

for i:=0 to maxk do

begin

if is[i]=l then { если число еще не "проколото" }

begin

prime:=i+i+3; { сформировали очередное простое число }

inc(n); { увеличили счетчик простых чисел }

write(prime:5); { вывод очередного простого числа }

k:=i+prime; { индекс для первого "прокола" }

while k<=maxk do

begin { "проколы" чисел, делящихся на pr_num }

is[k]:=0; inc(k,prime); end end; end;




- Начало -  - Назад -  - Вперед -