Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
math-logics_1.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
194.97 Кб
Скачать

Варианты заданий

1. f (x, y) = [log2((x + 1) · (yy+2x) + 2x] + 2 + [y] .

2. f (x, y) = [x3] + [ 1+x+y xy + 2x] + 22x+y2 .

...2y+2

3. f (x, y) = xyy+1 .

...2y+3

4. f (x, y) = x(y+1)(y+2) .

5. f (x) = [(x2 + x)4 + x3 + 2x] + [5 x3 + 2x + 1] + 82x+2.

2x+3

6. f (x) =

[xi + 3i + ix + 2x + 2 + i] .

i=1

y+2

7. f (x, y, z) = [log2y+x+1((y + 3)(y+2·x)!)] + { x }.

8. f (x, y, z) = {x 3 } + [ 1+x+y xy + 2zy2] + 22x+z .

2

3

9. f (x, y) = [x4 + x2] + [5 xy + 2x + 1] + 82x+y3 .

10. f (x, y, z) = [(z2 + y)4 + x3 + 2x = z4] + [3 xz + 2x + 1] .

11. f (x, y) = [log5(yy+2·x) + x!] + [x] + [y] .

xx+4

i 3

{ }.

12. f (x) =

x+2 +i

4x+1+i

i=0

2x+3

13. f (x, y) =

[xi + 2i + 2y + 3y + i] .

i=1

14. f (x, y, z) =

x+z

iy

[ i + 2j + 2z+x+ij + 3j + i] .

i=0 j=0

15. f (x) = [(x2 + y)4 + x3 + 2x] + [5 x3 + 2x + 1] + 82x+2.

16. f (x) = [5x2] + [ x+2 x + 2x4] + 22x+2.

y3+3

17. f (x, y) = [1 + log3(52y+2+x) + 2x] + { x+y }.

18. f (x, y) = [xyx2 + y2] + [ 1+x xy + 2x] + x2+y.

19. f (x) =

2x+3

i=0

[xi+3i+ix ] 2x+2+i

y2+2x

.

20. f (x, y) = [lg(y(y + 2x+y+2)) + 2x] + { x }.

Задача 2

Доказать примитивную рекурсивность функции p(x) – простое число с номером

x. В соответствии с доказательством написать программу вычисления этой функции.

Решение. Рассмотрим сначала вспомогательную функцию h(x), равную числу делителей числа x. Очевидная формула

x

h(x) = (sg({x/i})),

i=1

(где выражение {x/i} означает остаток от деления x на i ) доказывает примитивную рекурсивность функции h(x), являющейся суперпозицией примитивно-рекурсивных функций. Простые числа и только они имеют ровно два делителя — единицу и самого себя. Числа 0 и 1 простыми не являются. Все числа, не являющиеся простыми, кроме 0 и 1, имеют число делителей, большее двух. Тогда характеристическая функция χp(x) предиката ⟨x — простое число при x > 1⟩ равна

χp(x) = sg(h(x)−˙ 2)

и является примитивно–рекурсивной.

Одной из наиболее известных арифметических функций является функция π(x), равная числу простых чисел, не превосходящих x. Используя уже известную нам примитивно–рекурсивную функцию χp(x), получим

x

π(x) = (χp(i).

i=1

Отсюда следует, что искомая функция p(x) – простое число с номером x – представ- ляет собой минимальное решение уравнения

π(z) = x.

Таким образом,

p(x) = µz (π(z) = x).

Для доказательства примитивной рекурсивности функции p(x) достаточно ввести верхнюю границу изменения z и доказать примитивную рекурсивность как этой гра- ницы, так и характеристической функции предиката p(x) = x. Последнее легко сде- лать, т.к. эта функция равна

sg((π(z)−˙ x) + (x˙ π(z))).

Осталось рассмотреть границу изменения z. Из теории чисел хорошо известно, что

n

pn < 22 . В самом деле, требующееся нам неравенство заведомо истинно при n = 0.

По индукции далее предполагаем, что это неравенство истинно для всех значений n, докажем его для n + 1.

0

По предположению имеем

Тогда

p0 < 22 ,

1

p1 < 22 ,

. . .

n

pn < 22 .

0 1 n

0 1 n

n+1

p0 · p1 · ... · pn + 1 < 22

· 22

· ... · 22

+ 1 = 22 +2 +...+2

+ 1 < 22 .

Число a = p0 · p1 · ... · pn + 1 больше единицы и поэтому должно иметь какой-то про- стой делитель pr. Этот делитель не может совпадать ни с одним из простых чисел p0, p1, ...pn, так как при делении числа a на любое из чисел p0, p1, ...pn получается остаток 1. Но все простые числа, не превосходящие pn, содержатся в последователь- ности p0 , p1 , ... pn. Число pr в нее не входит и, следовательно, pn+1 pr. Так как pr a, то

что и требовалось доказать.

pn+1 a < 22

n+1

,

Итак, неравенство доказано, а вместе с ним доказана и примитивная рекурсив- ность функции p(x), имеющей своим значением простое число с номером x.

Напишем теперь программу вычисления этой функции, соответствующую постро- енному доказательству. Сразу отметим, что доказательство примитивной рекурсив- ности функции не ставит своей целью построение алгоритма, обладающего хорошими временными характеристиками. Такое доказательство обосновывает лишь существо- вание алгоритма решения поставленной задачи, причем свойство определенности всюду для примитивно–рекурсивных функций означает, что для любых исходных данных соответствующая программа получит результат через некоторое конечное (может быть, очень большое ) время.

Приведенному выше доказательству соответствует следующая программа.

#include <stdio.h>

#include <STDLIB.H>

int sg(int x) { return x>0; }

int h(long int x)

{

long int i; int s=0;

for (i=1; i<=x; i++ ) i); return s;

}

int Xi(long int x)

{

if (x==1) return 1; if (x==0) return 0; return 1-sg(h(x)-2);

}

long int Pi( long int x)

{

long int i,s=0;

for (i=1; i<=x; i++ )s+=Xi(i); return s;

}

long int p( long int x)

{

long int z=0;

while (Pi(z)!=x) z++; return z;

}

void main(void)

{

int x; d",&x); unsigned long int z=p(x);

printf("простое число с номером d равно ld\n",x,z);

}

Следует отметить, что мы доказали алгоритм для любого x N . Однако, огра- ничение разрядной сетки компьютера не позволяет на уровне команд выполнить операции над сколь угодно большими числами. В нашей программе мы ограничили получаемые значения типом long int. Если программа должна работать с большими числами, необходимо реализовать так называемую длинную арифметику.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]