- Теория:
- Алгоритмы:
- Числа:
|
ГЛАВА IV
ОБЩИЕ ЗАДАЧИ
Близнецы и дружественные числа
|
1. Проверить утверждение: количество пар двузначных близнецов равно количеству пар трехзначных дружественных чисел.
2. Найти первое дружественное число, сумма цифр которого - число близнец.
|
1. Проверить утверждение: количество пар двузначных близнецов равно количеству пар трехзначных дружественных чисел.
Ответ:
220 284
Количество пар дружественных чисел = 1
3 и 5 близнецы
5 и 7 близнецы
Количество пар чисел близнецов = 2
Количество пар двузначных близнецов равно количество пар трехзначных дружественных чисел: False
program block4_01;
uses crt;
var
a,s,b,i,s1,koldr:integer;
{a - первое число;
i -
делители числа a;
s -
сумма делителей первого числа;
b -
делители числа s;
s1 -
сумма делителей s;
koldr - количество пар дружественных чисел
}
kolb, ii, d1, d2,k,k1:integer;
{i - первое число;
ii - второе число;
d1, d2 -
делители для первого и второго числа
k, k1 - количество делителей для первого и второго числа;
kolb - количество пар близнецов
}
p:boolean; {проверка истинности условия задачи}
begin
clrscr;
{Первая часть программы: поиск трехзначных дружественных чисел}
koldr:=0;
for a:=100 to 1000 do
begin
s:=0; {для каждого числа a будем искать свою сумму делителей, поэтому сначала она равна 0}
for i:=1 to a-1 do
if a mod i=0 then s:=s+i; {нашли сумму делителей числа a}
s1:=0;
for b:=1 to s-1 do
if s mod b=0 then s1:=s1+b; {нашли сумму делителей для s}
if (s1=a) and (s< >a) and (s > a) then {условие s>a для отсечения повторяющихся пар чисел}
begin
inc (koldr); {увеличиваем количество пар дружественных чисел на 1}
writeln(a:10,s:10)
end;
end;
writeln ('Количество пар дружественных чисел= ',koldr);
{Вторая часть программы: поиск двузначных чисел близнецов} writeln;
for i:=1 to 10 do {i - младшее число пары}
begin
k:=0; {поиск количества делителей младшего числа}
for d1:=1 to i do
if (i mod d1)=0 then inc(k);
ii:=i+2; {ii - старшее число пары}
k1:=0; {поиск количества делителей старшего числа}
for d2:=1 to ii do
if (ii mod d2)=0 then inc(k1);
if (k=2) and (k1=2) then {если в обоих случаях количество делителей равно 2, то пара чисел - близнецы}
begin
writeln (i, ' и ', ii , ',близнецы');
inc(kolb)
end;
end;
writeln ('Количество пар чисел близнецов = ',kolb);
p:=koldr=kolb;
writeln;
Writeln('Количество пар двузначных близнецов равно количество пар трехзначных дружественных чисел: ',p);
end.
|
2. Найти первое дружественное число, сумма цифр которого - число близнец.
Ответ:
5020
program block4_02;
uses crt;
var
a: integer;
b, i, s, s1: integer;
ch:integer;
{a - первое число;
b -
делители числа s;
i -
делители числа a;
s -
сумма делителей первого числа;
s1 -
сумма делителей s}
sumdr, ii, d1, d2,k,k1:integer;
{i - первое число;
ii - второе число;
d1, d2 -
делители для первого и второго числа
k, k1 - количество делителей для первого и второго числа;
sumdr - сумма цифр
}
f:boolean; { для условия цикла}
begin
clrscr; a:=2; sumdr:=1;
while f< >true do {цикл для проверки первых чисел}
begin
f:=false;
inc(a);
sumdr:=0; {сумма цифр дружественного числа=0}
s:=0;
for i:= 1 to a-1 do {находим все делители числа а,
исключая само число}
if a mod i = 0 then s:= s+i; {находим сумму делителей числа а}
s1:=0;
for b:= 1 to s-1 do {цикл для проверки вторых чисел,
которые являются суммой делителей первого числа}
if s mod b = 0 then s1:= s1 +b; {находим все делители чила s
(сумма делителей числа а)}
if (s1=a) and (s< >a) and (s>a) {если число дружественное, то находим сумму его цифр}
then
begin
ch:=s1;
while ch<>0 do begin sumdr:=sumdr+(ch mod 10); ch:=ch div 10;end;
{writeln(s1)};
{writeln('sumdr=',sumdr)}
end;
{++++++++++++}
{Вторая часть программы: поиск двузначных чисел близнецов}
i:=sumdr; {i - старшее число пары}
k:=0; {поиск количества делителей младшего числа}
for d1:=1 to i do
if (i mod d1)=0 then inc(k);
ii:=i-2; {ii - младшее число пары}
k1:=0; {поиск количества делителей старшего числа}
for d2:=1 to ii do
if (ii mod d2)=0 then inc(k1);
if (k=2) and (k1=2) then f:=true; {если в обоих случаях количество делителей равно 2, то пара чисел - близнецы}
end;
writeln('a=',a)
end.
|
|
|
|
|
|
|