прочитать ещё "Поиск алгоритмов старения"

вернуться на главную

Демонстрация справедливости теоремы Ферма средствами Турбо Паскаль (в качестве не строгого, но практического доказательства) Demonstration of correctness of Fermat’s theorem means of Turbo Pascal (In quality not strict, but the practical proof)

Аннотация: даётся вывод универсальной формулы, для которой формула т. Ферма является частным случаем. Приводится программа на Турбо Паскале для поиска целочисленных решений для всех степеней. Результаты работы программы демонстрируют, что область значений найденных решений для универсальной формулы, с ростом степени выходит за рамки значений, необходимых для соблюдения формулы т. Ферма.

УДК 511 Или 51-3:519.67

Ключевые слова: доказательство теоремы Ферма, справедливость теоремы Ферма, теорема Ферма.

Keywords: theorem of Fermat, Fermat’s, proof, theorem Last, Turbo Pascal.

Ниже приводится программа на Турбо Паскале, которая позволяет сделать наблюдаемым поиск решений для разных степеней. В конце статьи помещена таблица с результатами. Но сначала несколько предварительных замечаний. Запишем формулу Ферма в виде

an + bn - c n = 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

Т.к. последние разности одинаковы, то для любых членов ряда справедливо выражение (вверху степень, внизу номер члена):

x32- x22- (x22- x12) =

x32- 2x22+ x12 = 2 = 2!

Мы получили универсальную формулу для степени n = 2. Запишем её через интервал, равный единице:

(x + 2)2- 2(x + 1)2 + x2 = 2!
(Можно подставить вместо х любое целое число и убедиться в справедливости этой формулы).

Вывод формул для других степеней происходит аналогичным образом.

Если брать другие степенные ряды, члены которых взяты с интервалом равным единице, всегда можно вычисляя разность между соседними членами, а затем и между получившимися значениями, в конечном итоге дойти до некоторой константы и получить соответствующие формулы.

Так для третьей степени получаем:

x43- 3x33+ 3x23- x13 = 6 = 3! .

Эта же формула в записи через интервал:

(x + 3)3- 3(x + 2)3 + 3(x + 1)3 - x3 = 3! .

Для четвёртой степени:

x54- 4x44+ 6x34- 4x24 + x14= 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/80287}
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 , начиная с третьей 
степени, стремительно нарастает. Когда же степень больше n=5, минимальное значение 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 -2419492 1 2
							27. 04.2008 г.
							Прудников П.А.
							г. Семикаракорск


Hosted by uCoz