- Теория:
- Алгоритмы:
- Числа:
|
ГЛАВА II
ЗАДАЧИ С РЕШЕНИЯМИ
Простые числа
|
1. Найти количество простых чисел в интервале [10, 1000].
2. Найти простые числа в заданном интервале.
3. Найти двадцатое простое число.
4. Найти удвоенное десятое простое число.
5. Найти все простые двузначные числа, заканчивающиесяна цифру 3.
6. С клавиатуры вводятся 5 чисел. Найти количество простых, трехзначных.
7. Найти первое простое число, сумма цифр которого больше 10.
8. С клавиатуры вводятся 5 чисел. Найти количество простых чисел, сумма цифр которых меньше 10.
9. Найти первое простое число, сумма цифр которого больше 8, а произведение цифр меньше 10.
|
1. Найти количество простых чисел в интервале [10, 1000]. Ответ: k=164
program prost_01; uses crt; var ch, del, kd, k: integer; {ch - проверяемые числа;
del - делители; kd - количество делителей;
k - количество простых чисел}
begin clrscr;
k:=0;
for ch:=10 to 1000 do {заданный интервал чисел}
begin
kd:=0;
for del:=1 to ch do
if ch mod del=0 then inc(kd);
If kd=2 then inc(k)
end;
write('k=',k);
end.
|
2. Найти простые числа в заданном интервале.
Ответ:
a=1
b=10
2 3 5 7
program prost_02;
uses crt;
var a, b, ch, del, kd, k: integer;
{a, b - границы интервала чисел;
ch - проверяемые числа;
del - делители;
kd - количество делителей;
k - количество простых чисел}
begin
clrscr;
write('a='); readln(a); {вводим границы интервала чисел}
write('b='); readln(b);
k:=0;
for ch:=a to b do
begin
kd:=0; {алгоритм поиска простых чисел}
for del:=1 to ch do
if ch mod del=0 then inc(kd);
If kd=2 then write(ch:5);
end;
end.
|
3. Найти двадцатое простое число.
Ответ: k=20 ch=71
program prost_03;
uses crt;
var ch, del, kd, k : integer;
{ch - проверяемые числа;
del - делители;
kd - количество делителей;
k - счетчик простых чисел}
begin clrscr;
ch:=0; k:=0;
while k<20 do
begin
inc(ch)
; {начинаем проверять числа с 1}
kd:=0;
for del:=1 to ch do if ch mod del=0
then inc(kd);
If kd=2 then inc(k); {если число простое, то увеличиваем счетчик чисел на 1}
end;
write('k=',k); writeln('ch=':5,ch);
end.
|
4. Найти удвоенное десятое простое число.
Ответ: k=10, ch=29, ch*2=58
program prost_04;
uses crt;
var del, kd, k, ch:integer;
{ch - проверяемые числа;
del - делители;
kd - количество делителей;
k - счетчик простых чисел}
begin clrscr;
ch:=0; k:=0;
while k<10 do begin
ch:=ch+1; kd:=0;
for del:=1 to ch do
if ch mod del=0
then inc(kd);
If kd=2 then inc(k) end;
write('k=':10,k);write('ch=':10,ch); write('ch*2=':10, ch*2);
end.
|
5.(1) Найти все простые двузначные числа, заканчивающиеся на цифру 3.
Ответ: 13, 23, 43, 53, 73, 83
program prost_05_01; {первый вариант решения}
uses crt;
var ch, kd, del: integer;
begin
clrscr;
for ch:=10 to 99 do
begin
kd:=0; {алгоритм для нахождения простого числа}
for del:=1 to ch do
if ch mod del=0 then inc (kd);
if (kd=2) and (ch mod 10=3) then writeln (ch);
end;
readkey;
end.
|
5.(2) Найти все простые двузначные числа, заканчивающиеся на цифру 3.
Ответ: 13, 23, 43, 53, 73, 83
program prost_05_02; {второй вариант решения}
uses crt;
var k,kd,ch,del:integer;
begin clrscr;
for k:=1 to 9 do
begin
kd:=0;
ch:=k*10+3;
for del:=1 to ch-1 do
if ch mod del=0 then inc(kd);
if kd=1 then writeln ('ch=',ch);
end;
end.
|
6. С клавиатуры вводятся 5 чисел. Найти количество простых,
трехзначных
Ответ может быт такой: 12, 13, 131, 131, 131 kch=3.
program prost_06;
uses crt;
var i, ch, del, kd, kol: integer;
{i - счетцик цикла;
ch - число;
kd - количество делителей;
del - делители;
kol - количество чисел}
begin
clrscr;
for i:=1 to 5 do {5 раз будем вводить число с клавиатуры}
begin
readln(ch);
kd:=0; {алгоритм для определения простого числа}
for del:=1 to ch do
if ch mod del =0 then inc(kd);
if (kd=2) and (ch>=100 ) and (ch<=999) then inc (kol);
end; {число трехзначное, если оно попадает в заданный интервал}
writeln('kol=', kol);
end.
|
7. Найти первое простое число, сумма цифр которого больше
10.
Ответ: 29
program prost_07;
uses crt;
var ch, num, kd, del, c , sum: integer;
{ch - проверяемое число;
num - дубликат числа;
kd -количество делителей;
del - делитель;
c - цифра числа;
sum - сумма цифр числа}
begin
clrscr;
ch:=1;
while sum <= 10 do
begin
num:=ch;
kd:=0; {алгоритм для определения простого числа}
for del:=1 to num do
if num mod del=0 then inc (kd);
If kd=2 then
begin {если число простое, то проверка продолжается, иначе начинаем проверять следующее число}
sum:=0; {алгоритм для нахождения суммы цифр числа}
while (num< >0) do
begin
c:= num mod 10;
num:=num div 10;
sum:=sum+c
end;
end;
inc (ch);
end;
write ( 'Первое простое число, сумма цифр которого больше десяти: ', ch-1);
end.
|
8. С клавиатуры вводятся 5 чисел. Найти количество простых
чисел, сумма цифр которых меньше 10.
Ответ может быть такой: 3, 3, 3, 3, 6 kch = 4
program prost_08 ;
uses crt;
var i, ch, del, kd, S, kol: integer;
{ i - счетцик цикла;
ch - число;
kd - количество делителей;
del - делители;
S - сумма цифр числа ch;
kol - количество чисел }
begin
clrscr;
for i:=1 to 5 do {5 раз будем вводить число с клавиатуры}
begin
readln(ch);
kd:=0; {алгоритм для определения простого числа}
for del:=1 to ch do
if ch mod del =0 then inc(kd);
if kd=2 then {если число простое, то проверка продолжается, иначе начинаем проверять следующее число}
begin
S:=0;
while ch < > 0 do {алгоритм для нахождения суммы цифр числа}
begin
inc(S, ch mod 10);
ch:=ch div 10
end;
if S < 10 then inc(kol);
end;
end;
writeln('kol=', kol);
end.
|
9. Найти первое простое число, сумма цифр которого больше
8, а произведение цифр меньше 10.
Ответ: 19.
program prost_09;
uses crt ;
var ch,ch1,del,S,P,kd, kch, c : integer;
{ch - проверяемые числа;
ch1 - дубликат числа ch для нахождения суммы и произведения его цифр;
del - делители;
kd - количество делителей;
c - цифры;
S - сумма цифр числа ch;
P - произведение цифр числа ch}
begin
clrscr;
ch:=1;
repeat
kd:=0;{алгоритм для определения простого числа}
For del:=1 to ch do
if ch mod del =0 then inc (kd);
S:=0; {алгоритм для нахождения суммы и произведения цифр числа}
P:=1;
ch1:=ch;
while ch1 < >0 do
begin
c:=ch1 mod 10;
ch1:=ch1 div 10;
S:=S+c;
P:=P*c;
end;
inc(ch);
until (kd<=2) and (s>8) and (p<10);
write( 'ch= ' , ch - 1);
End.
|
|
|
|
|
|
|