Паскаль. Основы программирования


Задание 1 - часть 4


                           end

    end;

Процедура

вычисления степени натурального числа с натуральным показателем (extent - степень):

    Procedure extent(a, n : integer; var

s : longint);

          var

             i : integer;

          begin

             s := 1;

             for i := 1 to n do s := s*a

          end;

В основной программе надо пробовать каждое число из промежутка, является ли оно простым, а для этого необходимо обращение к процедуре probleme_number(i, p).

Если

получено простое число, тогда следует 2 возвести в эту степень, а для этого следует обратиться к процедуре extent(2, p, m).

Наконец, полученный результат также надо проверить, является ли он простым числом. Если

является, тогда мы получаем число Мерсена.

Казалось бы все хорошо, но нас поджидают многие неприятности.

Неприятность первая! Выбрано число 3, процедурой probleme_number(i, p) установлено, что оно простое число и его значение присвоено переменной p. Следующим числом из выбранного промежутка является 4, процедура probleme_number(i, p) установила, что оно не является простым и его значение не присваивается переменной p. Тогда возникает вопрос, а чему равно значение переменной p? Оказывается оно осталось прежним, т. е. равным 3 - предыдущему простому числу.

Если продолжать дальше процесс в программе, тогда значения будут повторяться. Аналогичное повторение будет и при проверке предполагаемого числа Мерсена, является ли оно простым?

Чтобы избежать этих неприятностей, после каждой проверки, начиная с первой, необходимо запоминать полученные значения простых чисел в новые переменные, например: p1 := p; m1 := m; n1 := n, а затем перед повторным обращением к процедурам вычисления степени и проверке простых чисел, проверять, а не являются ли эти значения повторениями предыдущих.

Эта часть основной программы такая:

                    for i := 2 to b do

                       begin

                          probleme_number(i, p);

                          if p <> p1 then




Начало  Назад  Вперед