Cümə, 26.04.2024, 10:28
İnformatikanın məktəbdə tədrisi
Baş səhifə Qeydiyyat Giriş
e-mail: informatik-az@mail.ru · RSS
Menyu
Fotoşəkillər
Giriş forması
Sorğu
Müəllim kimi informatika dərslərində tez-tez istifadə edirəm:
Cavabların sayı: 9371
Faydalı keçidlər

  • ict.edu.az
  • ict.az
  • telekommunikasiya.edu.az
  • İnf-math.narod.ru
  • Millibyte.az
  • kayzen.az/blog/informatika
  • alqoritm.ucoz.org
  • mincom.gov.az
  • Facebook-da
    Təqvim
    «  Aprel 2024  »
    B.e.Ç.a.ÇC.a.CŞB
    1234567
    891011121314
    15161718192021
    22232425262728
    2930
    Təqdimatlar
    Statistika

    Onlayn: 10
    Ziyarətçilərin sayı: 10
    Qeydiyyatdan keçənlərin sayı: 0


     2-19r
    Два натуральных числа называются дружественными, если каждое из них равно сумме делителей другого, кроме самого этого числа. Найти все пары дружественных чисел, лежащих в диапазоне от  N до    M включительно (N < M < 10000)

    В этой задаче без функции уже не обойтись. Функция sumdel вычисляет сумму делителей передаваемого ей числа  n. Мы учитываем (см. примечание к задаче 2.13), что если число делится на  i то оно делится и на n div i (n/i) и оба эти делители прибавляем к сумме – строка 11. А если i является «центром» делителей (i*i=n), то делитель i добавляем к сумме 1 раз – строка 14.  В головной программе мы перебираем все пары чисел в диапазоне от   n  до m и проверяем их при помощи функции sumdel – строка 24, 25.

    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

    Program A2_19;

    Var

      n,m,i,j,d:integer;

     

     Function  sumdel(n:integer):integer;

      Var s,i:integer;

       begin

         i:=2; s:=1;

         while (i*i<n) do

           begin

             if (n mod i=0) then s:=s+i+(n div i);

             INC(i);

           end;

        if (i*i=n) then s:=s+i;

        sumdel:=s;

       end;

     

     begin

        readln(n,m);

        for i:=n to m-1 do

         begin

           d:=sumdel(i);

           for j:=i+1 to m do

         if (j=d) then

            if (i=sumdel(j)) then write('(',i,',',j,') ');

         end;

        writeln;

        readln;

     end.

    // Program A2.19;

    #include <iostream>

     

    using namespace std;

     

    int sumdel(int n)

    {  int s=1,i;

        for (i=2;i*i<n;i++)

            if (n%i==0) s=s+i+n/i;

        if (i*i==n) s=s+i;

        return s;

    }

     

     

     

     

    int main()

     { int n,m,i,j,d;       

        cin>>n>>m;        

        for (i=n;i<m;i++)

       { d=sumdel(i);

          for (j=i+1;j<=m;j++)

         if (j==d  && i==sumdel(j))

             cout<<"("<<i<<","<<j<<")  ";

        }

        cout<<endl;

        return 0;

    }

     


    Примечание. В программе для поиска пар чисел для проверки, являются ли они дружественными, мы использовали двойной цикл. Во внешнем цикле      for i:=n to m-1 do  сумма делителей числа i вычисляется 1 раз, а вот во внутреннем цикле for j:=i+1 to m do сумма делителей числа j вычисляется несколько раз.  Но существует алгоритм, в котором все пары находятся в одном цикле и время вычисления уменьшается в несколько десятков раз. Найдите этот алгоритм.






    Copyright İsaNaida © 2024
    PYTHON 3.4
    ALPLogo
    Info-Ko
    Fəxr edirik


    Elan
    Bölmələr
    MÜSABİQƏ
    Azərbaycanda İKT
    Axtarış
    Video