ВХОД

МЕТОДИЧЕСКИЕ РАЗРАБОТКИ ПО КУРСУ ИНФОРМАТИКИ

"ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PASCAL"

Начало > Глава IV. Близнецы, Дружественные > Задачи с решениями

ГЛАВА IV

ЗАДАЧИ С РЕШЕНИЯМИ

Дружественные числа



1. Составить программу, которая находит все дружественные числа в интервале [1; 10000].
  Переход
Блок-схема

2. Найти количество пар дружественных чисел в интервале [100; 10 000].
  Переход
Блок-схема

3. Проверить утверждение: четырехзначных дружественных чисел больше, чем трехзначных.
  Переход
Блок-схема

1. Составить программу, которая находит все дружественные числа в интервале [1; 10000].

Ответ:
Программа, находящая все дружественные
числа в интервале от 1 до 10000
Числа 220 и 284 - дружественные
Числа 284 и 220 - дружественные
Числа 1184 и 1210 - дружественные
Числа 1210 и 1184 - дружественные
Числа 2620 и 2924 - дружественные
Числа 2924 и 2620 - дружественные
Числа 5020 и 5564 - дружественные
Числа 5564 и 5020 - дружественные
Числа 6232 и 6368 - дружественные
Числа 6368 и 6232 - дружественные
Программа завершена.


program dr_01;
uses crt;
var a: longint;
b, i, s, s1: integer;
    {a - первое число;
    b - делители числа s;
    i - делители числа a;
    s - сумма делителей первого числа;
    s1 - сумма делителей s}
begin
clrscr;
writeln ('Программа, находящая все дружественные');
writeln ('числа в интервале от 1 до 10000');
for a:= 2 to 10000 do {цикл для проверки первых чисел}
    begin
      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) then writeln ('Числа ', a, ' и ',s,' - дружественные'); {сумма делителей суммы делителей числа а должна быть равна числу A, а сумма делителей числа A не должна быть равна этому числу}
    end;
writeln('Программа завершена') {для визуального контроля: выполнение программы может занимать некоторое количество времени}
end.

2. Найти количество пар дружественных чисел в интервале [100; 10 000].
Ответ:
220 284
1184 1210
2620 2924
5020 5564
6232 6368
kol=5

program dr_02;
uses crt;
var a,s,b,i,s1,kol:integer;
    {a - первое число;
    b - делители числа s;
    i - делители числа a;
    s - сумма делителей первого числа;
    s1 - сумма делителей s;
    kol - количество пар дружественных чисел }
begin
clrscr;
kol:=0;
for a:=100 to 10000 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 (kol);
      writeln(a:10,b+1:10)
      end;
    end;
writeln ('kol=',kol);
end.
3. Проверить утверждение: четырехзначных дружественных чисел больше, чем трехзначных.
Ответ:

220 284
1184 1210
2620 2924
5020 5564
6232 6368

kol 3zn =1
kol 4zn =4
True


program dr_03;
uses crt;
var a,s,b,i,s1,k:integer; kol_3zn, kol_4zn:integer;
p:boolean;
    {a - первое число;
    b - делители числа s;
    i - делители числа a;
    s - сумма делителей первого числа;
    s1 - сумма делителей s;
    k - количество пар дружественных чисел;
    kol_3zn - количество пар 3-значных чисел;
    kol_4zn - количество пар 4-значных чисел}
begin
clrscr;
k:=0;
for a:=100 to 9999 do
    begin
    s:=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 {если эти условия соблюдаются, то числа - дружественные...}
      begin
      inc (k);
      writeln(a:10,s:10);
      if s<=999 then {если трехзначные числа кончились, то обнуляем количество дружественных чисел}
        begin inc(kol_3zn); k:=0 end;

      end;
    end;

writeln('Количество пар трехзначных дружественных чисел = ', kol_3zn);
kol_4zn:=k ;
writeln('Количество пар четырехзначных дружественных чисел = ', kol_4zn);
p:= kol_4zn > kol_3zn ;
writeln(p);
end.


 

 

 

 

Copyright ©2011 Nika A.S.
Hosted by uCoz