Язык программирования Pascal. Процедуры и функции. Рекурсия. Васильев В.В - 5 стр.

UptoLike

5
блоков , в которые вложена данная процедура или функция (если имена иден-
тификаторов из внешнего окружения отличны от имен, объявленных внутри
процедуры или функции);
- локальные идентификаторы во внешнем окружении не действуют;
- в случае совпадения имен локальных и глобальных идентификаторов
внутри функции или процедуры действие глобальных идентификаторов отме-
няется и используются одноименные локальные идентификаторы .
Напишем программу, в которой создается и используется новая функция .
Задача 1. Найти все числа Мерсенна типа integer.
Французский математик М .Мерсенн (1588-1648) заметил, что многие
простые числа имеют вид 2
P
-1, где p является тоже простым числом . Все числа
указанного вида называются числами Мерсенна. Не все числа Мерсенна явля -
ются простыми. Например , до 1903 г. считалось, что число 2
67
-1- простое . На
самом деле , это число представляет собой произведение двух простых чисел
193 707 721 и 761 838 257 287. Неясно, бесконечно ли множество чисел Мер -
сенна.
p+1-е число указанного вида можно выразить через p - е число следующим
образом 2
P+1
-1=2(2
P
-1)+1. Переменная p принимает значения идущих подряд на-
туральных чисел (2,3,4,...). Переход к вычислению очередного числа будем де-
лать после проверки на непереполнение типа integer. На экран будем выводить
только те числа вида 2
P
-1, для которых p - простое число.
Чтобы найти числа Мерсенна, нам потребуется функция , проверяющая ,
является ли число p простым. Проверим, имеет ли число p (
p
2
) делители в
интервале
[
]
22, pdiv
. Делители будем искать только для нечетных чисел.
Напомним, что функция odd() возвращает значение истина, если аргумент явля -
ется нечетным числом .
В основной программе переменная n используется для перебора показате-
лей степеней двойки. Mers хранит очередное число вида 2
n
-1. Переменная логи -
ческого типа p принимает значение true при выходе очередного числа вида 2
n
-1
из диапазона integer.
В подпрограмме аргументом служит переменная p целого типа. Перемен-
ная n предназначена для перебора делителей числа p .
Program Mersenn;
Uses crt;
Var n,mers:integer; p:boolean;
Function prost(p:integer):boolean;
Var n:integer;
Begin
if p=2
then prost:=true
else if not odd(p)
then prost:=false
else