1 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 26 28 29 30 31 32 33 34 35 36 | Program A2_16a;
Var n,p,k,k1,p1:
integer; begin readln(n); if (n=1)
then begin writeln('n=1 ???'); exit;end; write('2'); if (n<=3)
then exit; write(' 3'); if (n<5)
then exit ; p:=2; k:=5; while
(k<n) do begin if (k mod 3 <>0) then
begin k1:=5; p1:=2; while
(k1*k1<=k) and (k mod k1<>0) do
begin k1:=k1+p1; p1:=6-p1; end; if (k1*k1>k) then write(' ',k); end;
k:=k+p; p:=6-p; end; writeln; readln; | // Program A2.16a;
#include <iostream>
using namespace std;
int main() { int
n,p,k,k1,p1;
cin>>n;
if(n==1){cout<<"n=1 ???\n"; return 0;}
cout<<"2"; if(n<=3)
return 0;
cout<<" 3"; if(n<5)
return 0; for(p=2,
k=5; k<n; k=k+p, p=6-p) { if(k%3!=0)
{ k1=5; p1=2;
while(k1*k1<=k && k%k1!=0)
{k1=k1+p1; p1=6-p1;}
if(k1*k1>k) cout<<" "<<k; } }
cout<<endl; return 0; |
1 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 58 | Program A2_16b; Var n,p,k: integer;
Function checkprost(n:integer):integer; Var k,p: integer; begin if (n mod 3=0) then checkprost:=0
else begin p:=2; k:=5;
while(k*k<=n) and (n mod k<>0) do begin
k:=k+p; p:=6-p; end; if
(k*k>n) then checkprost:=1 else checkprost:=0; end end;
BEGIN readln(n); if (n=1)
then begin writeln('n=1 ???');readln; exit;end; write('2'); if (n<=3)
then begin readln; exit; end; write(' 3'); if
(n<5) then begin readln; exit; end; p:=2; k:=5; while
(k<n) do begin if
(checkprost(k)=1) then write(' ',k);
k:=k+p; p:=6-p; end; writeln; readln; | // Program A2.16b; #include <iostream>
using namespace std;
int checkprost(int n) { int k=5,p=2;
if(n%3==0)return 0;
while(k*k<=n && n%k!=0){k=k+p; p=6-p;} if(k*k>n)
return 1; else return 0; }
int main() { int n,p,k;
cin>>n;
if(n==1){cout<<"n=1 ???\n"; return 0;}
cout<<"2"; if(n<=3)
return 0;
cout<<" 3"; if(n<5)
return 0; for(p=2,
k=5; k<n; k=k+p, p=6-p) if(checkprost(
k)) cout<<" "<<k;
cout<<endl; return 0; } |
Дано натуральное число N. Найти все простые числа меньшие N.
Научившись в предыдущей задаче проверять число на простоту, решение настоящей задачи становится уже тривиальным. Переберем все «кандидаты» в простые числа и проверим каждый «кандидат» по предыдущему алгоритму. Простые числа 2 и 3 выведем отдельно (если n > 3). Перебирать числа начнем с 5 (по формуле 6*k +/- 1 «кандидаты» в простые числа начинаются с 5).
Программа 2.16b отличается от 2.16a тем, что проверка числа на простоту вынесена в отдельную подпрограмму – функцию (строки 10 – 31). Если число простое, то функция возвращает ( она равна) 1, а если не простое, то 0. В главной программе (строка 53) простое число выводится на экран.