Демонстрация справедливости теоремы Ферма
средствами Турбо Паскаль
(в
качестве не строгого, но практического доказательства)
Demonstration of correctness of Fermat’s
theorem means of Turbo Pascal
(In quality not strict, but the practical proof)
Прудников П.А.
г.
Семикаракорск, 27.04.08,
Ниже приводится программа на Турбо Паскале, которая
позволяет сделать наблюдаемым поиск решений для разных степеней. В конце статьи
приводится таблица с результатами. Но сначала несколько предварительных
замечаний. Запишем формулу Ферма в виде
an +
bn
– cn
= 0.
Все
члены этой формулы находятся в одной и той же степени.
Возникает
вопрос: не существует ли универсальная формула, такая, чтобы связывала
члены с одной и той же степенью? Оказывается, существует! Выведем её.
Вывод
формулы для степени n
= 2.
Рассмотрим
степенной ряд с интервалом равным единице:
12, 22,
32, 42, 52, 62, 72, 82…
Запишем
его в виде соответствующих значений:
1, 4, 9, 16, 25, 36, 49, 64,
Найдём
разность между его соседними членами. Получим ряд значений:
3 , 5, 7, 9, 11, 13, 15
Найдём
разность между этими значениями:
2, 2, 2, 2, 2, 2
Т.к.
последние разности одинаковы, то для любых членов ряда справедливо выражение
(вверху степень, внизу номер члена):
x23
–x22
–(x22
- x21)
=
x23
– 2x22
+ x21
= 2 = 2!
Мы
получили универсальную формулу для степени n = 2.
Запишем
её через интервал, равный единице:
(x +2)2 – 2(x +
1)2 + x2
= 2! (Можно подставить вместо х любое целое
число и убедится в справедливости этой формулы).
Вывод формул для других степеней происходит аналогичным
образом.
Если брать подобные степенные ряды, члены которых взяты с
интервалом равным единице, всегда можно вычисляя разность между соседними
членами, а затем и между получившимися значениями, в конечном итоге дойти до
некоторой константы и получить соответствующие формулы.
Так
для третьей степени получаем:
x34
– 3x33
+ 3x32
– x31
= 6 =3!
Эта
же формула в записи через интервал:
(x + 3)3 – 3(x + 2)3 + 3(x + 1)3 – x3 = 3!
Для
четвёртой степени:
x45
– 4x44
+ 6x43
– 4x42
+ x41
= 24 = 4!
Эта
же формула в записи через интервал:
(x + 4)4 – 4(x +
3)4 + 6(x +
2)4 – 4(x +
1)4 + x4
= 4!
Аналогичные
формулы получаются для степеней n = 5, n = 6, и т. д.
Возьмём за правило, что число в степени n можно выразить через
переменные такой же степени, взятые через одинаковый интервал (в данном случае
интервал равен единице). Переменные имеют коэффициенты как в треугольнике
Паскаля, знаки перед членами такого ряда правильно чередуются. Первый член
всегда имеет положительное значение. Свободный член такого ряда является
факториалом показателя степени. По этому правилу мы можем записывать универсальную формулу для любой целой степени.
Мы рассмотрели вывод формул, в которых интервал
(шаг) между соседними членами был равен единице. Теперь будем изменять
интервал, и рассматривать, как изменяются формулы.
Так, например, для степени n = 4 и интервала, равного двум,
получаем следующую формулу:
(x + 8)4 – 4(x +
6)4 + 6(x
+4)4 – 4(x +
2)4 + x4
= 4! • 24.
Замечаем: при изменении интервала меняется и значение
свободного члена, он равен факториалу степени, умноженному на интервал в такой
же степени.
В
данном случае, для степени n = 4 и интервала равного двум, значение свободного члена равно
4!•16 = 4!•24.
Учитывая, что формула из теоремы Ферма является частным случаем универсальной
формулы, мы можем формулу из теоремы Ферма записать так:
xn
+ (x + t)n
– ( x + z)n
= 0
Так как универсальная формула выполняется при любом интервале, в том числе и равном единице, то и при рассмотрении формулы из теоремы Ферма резонно ограничиться этим интервалом. Конечно, это может показаться некорректным, но результаты, полученные на интервале, равном единице, убедительно показывают, что поиск при других интервалах просто не имеет смысла.
При
интервале, равном единице, значение t и z по отдельности никогда не будут больше чем показатель
степени n (это следует из универсальной формулы).
При
этом всегда t < z. Сделанных замечаний
достаточно, чтобы начать поиск. Значение х для
нас неопределенно. Будем считать лишь, что х
≥ 2.
Приводимая ниже программа последовательно для каждой
степени производит вычисление значения
f = xn + (x + t)n
– ( x + z)n
и из всего диапазона этих значений f выбирает минимальное значение f_min для данной конкретной степени и при достаточно широких
(выбранных) значениях х. Наша цель найти f = 0.
Program Ferma__3;
Var eks,ti,zed,b,t,z,n,m,L,P:
Integer;
Var f_min,s,w,q,f: extended;
{Для этого надо выполнить настройки:
Option
→ Compiler…→
[X] 8087/60287}
Var x: Longint;
Label Conec;
Begin
L:=2;{ Начальное максимальное значение степени. В ходе выполнения программы оно будет увеличиваться}
Conec:
f_min:= 1E28; {Мы для начала вводим любое
достаточно большое число, чтобы было с чем сравнивать. Нас будет интересовать
минимальное значение по модулю. В случае успеха f_min = 0}
m:=L–1;
for n:= m to L do {выбираем диапазон
степени}
for t:=
1 to m do
for z:=
2 to L do
for x:= 2 to 1000000 do {для начала можно взять такие
значения х }
if (n = L) and (t < z) then
begin
s:=1;
w:=1;
q:=1;
for b:= 1 to L do
begin
{возводим в нужную степень}
s:=s*x;
w:=w*(x+t);
q:=q*(x+z);
end;
if b =L then
begin
f:=s+w–q; {вот она формула теоремы Ферма}
if
f = 0 then {при этом значении
формула выполняется}
begin
writeln (‘f=’,f:4:1,’
‘,’n=’,n,’ ‘,’x=’,x,’ ‘,’t=’,t,’ ‘,’z=’,z);
writeln (‘желаешь
продолжать: нажимай далее «Enter»’);
readln;
end;
if Abs(f) < Abs(f_min)
then {мы ищем для
данной степени минимальное значение f}
begin
f_min:=f;
ti:=t;
{ делаем кодировку, чтобы можно было для данного значения f не потерять
соответствующие ему значения t,
х, z }
zed:=z;
eks:=x;
end;
end;
end;
writeln (‘the End’,’
‘,’n=’,n,’ ‘,’f_min=’,f_min:30:1,’ ‘,
’eks=’,eks,’ ‘,’ti=’,ti,’
‘,’zed=’,zed); {пишется отчёт по
каждой степени для всех заданных нами значений х}
readln;
L:=L+1;
goto conec
end.
Результатом работы программы является
то, что минимальное значение f
, начиная с третьей степени, стремительно нарастает. После пятой степени
минимальное значение f
получается при неизменных значениях t =1, z
=2 и самом меньшем из взятых значений x. Это не оставляет надежд на дальнейший успешный поиск,
когда при n >2
значение f = 0
Таблица значений минимальных значений f = f_min получаемых с
помощью вышеприведённой программы
n |
F_min |
eks |
ti |
zed |
2 |
0 |
3 |
1 |
2 |
3 |
1 |
9 |
1 |
3 |
4 |
-
64 |
7 |
1 |
2 |
5 |
12 |
13 |
3 |
4 |
6 |
-3303 |
2 |
1 |
2 |
7 |
-14069 |
2 |
1 |
2 |
8 |
-58719 |
2 |
1 |
2 |
9 |
-241949 |
2 |
1 |
2 |