Перейти к содержимому

Фотография

Обобщённая Теорема Ферма


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 LKhiger

LKhiger

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Леонид Хигер
  • Город:NY

Отправлено 05 октября 2009 - 01:35

Всем известна Великая Теорема Ферма X^n + Y^n = Z^n. Одна из самых популярных тем математики.

DB2 представляет возможность поиграться с этой теоремой.
Убедиться, что она не имеет решений для n > 2 и имеет для n = 2.

Попробуйте.
Как всегда надо лишь скопировать код и запустить его на выполнение.

with pN(n, lim) as
( select 2, 500 from sysibm.sysdummy1)
,
Arguments(A, ApN) as 
(select int(1), int(1) from sysibm.sysdummy1
union all
select A + 1, power(A + 1, N)
from Arguments, pN
where A + 1 <= lim * power(2, 1. / N) + 1
)  
select X.A x, Y.A y, Z.A z,  
varchar(X.A) || '^'	|| varchar(N)	|| ' + '   || varchar(Y.A) || '^' || varchar(N)  
		|| ' = ' || varchar(Z.A) || '^'	  || varchar(N)   "Fermat Solution"
from Arguments X, Arguments Y, Arguments Z, pN 
where X.ApN + Y.ApN = Z.ApN 
  and Y.A		   > X.A
  and Z.A		   > X.A
  and Z.A		   > Y.A
  and Z.A	< X.A + Y.A

Lenny Khiger, ADSPA&VP
  • 0

#2 LKhiger

LKhiger

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Леонид Хигер
  • Город:NY

Отправлено 06 октября 2009 - 02:54

Возникает вопрос: Почему топик назван "Обобщённая Теорема Ферма" ?

В чём обобщение ?

Равенство X^n + Y^n = Z^n мы преобразуем в равенство:
Z^n / (X^n + Y^n) = 1.

Для n > 2 мы будем искать решение в интервале, но уже не равенства, а неравенства:
abs(Z^n / (X^n + Y^n) - 1) <= eps, или Z^n between (X^n + Y^n) * ( 1 - eps) and (X^n + Y^n) * ( 1 + eps)

Таким образом мы меняем наш SQL, и уже находим решения для n > 2:

with pN(n, lim, eps) as
( select 3, 500, double(1e-6) from sysibm.sysdummy1)
,
ArgX(x, XpN) as 
(select int(1), double(1) from sysibm.sysdummy1
union all
select X + 1, power(double(X + 1), N)
from ArgX, pN
where X + 1 <= lim
) 
,
ArgY(y, YpN) as 
(select * from ArgX )
,
ArgZ(z, ZpN) as 
(select int(1), double(1) from sysibm.sysdummy1
union all
select Z + 1, power(double(Z + 1), N)
from ArgZ, pN
where Z + 1 <= lim * power(2, 1. / n) + 1
) 
select X argX, Y argY, Z argZ , N "Power", (ZpN - (XpN + YpN)) "Absolute Difference" , 
double(ZpN) / double(XpN + YpN) - 1.0 "Relative Difference" 

from ArgX, ArgY, ArgZ, pN 
where ZpN between (XpN + YpN) * ( 1. - eps) and (XpN + YpN) * ( 1. + eps) 
and X < Y
and Y < Z
and X < Z
and Z <= X + Y 
order by abs(ZpN - (XpN + YpN)), X, Y

Lenny Khiger, ADSPA&VP
  • 0

#3 LKhiger

LKhiger

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Леонид Хигер
  • Город:NY

Отправлено 11 октября 2009 - 00:08

Я применил соотношения:
  and Y.A   > X.A
  and Z.A   > X.A
  and Z.A   > Y.A
  and Z.A  < X.A + Y.A
для ускорения работы и упорядочения результата.

Где Z.A < X.A + Y.A следует из известной теоремы о сумме двух сторон треугольника, которая всегда больше третьей.

Соотношение Y.A > X.A убирает симметричные решения типа:

Из двух решений 3^2 + 4^2 = 5^2 и 4^2 +3^2 = 5^2 остаётся только первое.

Lenny
  • 0

#4 LKhiger

LKhiger

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Леонид Хигер
  • Город:NY

Отправлено 15 октября 2009 - 01:38

We can see
135^3 + 235^3 = 248^3 + 1
(not bad !)

Lenny
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных