iİnformatikanın məktəbdə tədrisi

2-17r

Разложить натуральное число N на простые делители.

Для этой задачи мы также разработали две программы.
В программе 2.17а, начиная с  k=2 (строка 6) выполняем: если число n  делится на k, то выводим на экран это k и число n  делим на k, то есть удаляем делитель k из числа – строка 10. Если не делится на k, то увеличиваем k на 1 (строка 11) и снова выполняем предыдущие действия. Алгоритм сводится к следующему: удаляем все делители 2, если они есть, Затем все делители 3, затем проверяем 4 ( все равно на 4 делиться не будет, так как делители 2, если они были, все удалены раньше).  Затем 5, затем 6 (на 6 все равно не разделится, ведь делители и 2 и 3 ( если они были) были удалены на предыдущем этапе. Остаются только простые делители.
Программа 2.17b отличается от предыдущей тем, что проверяем деление не на  все числа подряд, а только на «кандидаты» в простые числа, которые вычисляем по формуле 6*k +/- 1, как в предыдущей программе. Так как «кандидаты» в простые числа начинаются с числа 5, то в программе проверяются числа 2, 3, 4, а с 5 уже по формуле – строки 10 12.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Program A2_17a;

Var

  n,k:integer;

  begin

    readln(n);

    k:=2;

    while (k*k<=n)  do

     begin

        while (n mod k=0) do

         begin write(k,' '); ;n:=n div k; end;

        INC(k);

     end;

    if (n>1) then write(n);

    writeln;

    readln;

  end.

// Program A2.17a;

#include <iostream>

 

using namespace std;

 

int main()

{

    int n, k=2;

    cin>>n;

    while(k*k<=n)

    {

        while(n%k==0){cout<<k<<" "; ;n=n/k;}

       k++;

    }

    if(n>1)cout<<n;

    cout<<endl;

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Program A2_17b;

Var

  n:integer; k:integer=2; p:integer=2;

  begin

   readln(n); ;

    while(k*k<=n ) do

     begin

        while (n mod k=0) do

       begin write(k,' '); ;n:=n div k; end;

       if(k<5) then INC(k)

                 else

      begin k:=k+p; p:=6-p; end;

     end;

      if (n>1) then write(n);

    writeln;

    readln;

  end.

// Program A2.17b;

#include <iostream>

 

using namespace std;

 

int main()

{  int n,k=2,p=2;

    cin>>n;

    while(k*k<=n )

    {

 while(n%k==0){cout<<k<<" "; n=n/k;}

        if(k<5) k++;

        else {k=k+p; p=6-p;}

    }

    if(n>1)cout<<n;

     cout<<endl;

    return 0;

}