Обсуждение:Метод Лемана (KQvr';yuny&Bymk; Lybgug)
А метод то не работает! (по крайней мере в том изложении, что приведено в статье).
Контрпример: . Диапазон изменения k: , k = 1 ... 2 Имеем:
k=1, , d = 0 ... 1
- d=0 A=7 B=-11
- d=1 A=8 B=4
k=2, , d = 0 ... 1
- d=0 A=10 B=-20
- d=1 A=11 B=1
Множитель не найден, значить 15 — простое число!
PS. На всякий случай привожу программу (после корректировки ее можно добавить в статью):
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
var
N, I, k, d, B, A, sqrt_B: Integer;
Found: Boolean;
begin
N := 15;
Writeln('N=', N);
Found := False;
for I := 2 to Trunc(Power(N, 1/3)) do
if N mod I = 0 then begin
Writeln('Factor found: ', I);
Found := True;
break;
end;
if not Found then begin
Writeln('Factor not found at first step');
for k := 1 to Trunc(Power(N, 1/3)) do
for d := 0 to Trunc( Power(N, 1/6) / (4 * Sqrt(k)) ) + 1 do begin
Write(' k=', k, ' d=', d);
A := Trunc(Sqrt(4*k*N)) + d;
B := Sqr(A) - 4*k*N;
Writeln(' A=', A, ' B=', B);
if B < 0 then
continue;
sqrt_B := Trunc(Sqrt(B));
if Sqr(sqrt_B) = B then
if (1 < d) and (d < N) then begin
Writeln('Factor found on second step: ', d);
Found := True;
Readln;
exit;
end;
end;
end;
Readln;
end.
Evatutin 09:33, 7 ноября 2010 (UTC)
- Уважаемый Evatutin, проверьте ещё раз свои вычисления, ибо для Вашего «контрпримера» всё срабатывает. Идём по алгоритму Лемана:
- Шаг 1. . Для проверяем, что 15 не делится на 2. Переходим на Шаг 2.
- Шаг 2. Значит число составное. ,
- Случай . . Значит .
- Случай . Проверяем, . Не является квадратом натурального числа!
- Случай . Проверяем, — квадрат натурального числа. Значит вычисляем и . Сравнение даёт положительный результат. Находим . удовлетворяет . Значит факторизация найдена .
- Случай . . Значит .
— KleverI 10:35, 7 ноября 2010 (UTC)
- Спасибо за развернутый ответ, код я поправил, работает! Исходя из описания я неправильно интерпретировал значение d (оно встречается в двух местах, я бы в одном из них заменил на другую букву — в коде у меня dd — в статье исправлю). Evatutin 19:54, 7 ноября 2010 (UTC)
Откат правки с программным кодом
[править код]Чтобы не развязывать войну правок, хотелось бы узнать мнение остальных участников о целосообразности включения программного кода в статью (а потом, если не понравится, откатить). На мой взгляд отлаженный и протестированный программный код позволяет легче разобраться с методом, чем описание на псевдокоде. Подобная практика встречается в других статьях: Числа Стирлинга второго рода, Одномерное стационарное уравнение Шрёдингера, Метод бисекции, Алгоритм_DDA-линии, en:Euler spiral и т.д. Ваше мнение? Evatutin 09:37, 11 ноября 2010 (UTC)
- Во-первых, если сопроводите программный код ВП:АИ с этим кодом, — возражений на добавление его в статью нет. Но коду, написанному абы кем-то на его любимом языке программирования — отказать. Во-вторых, алгоритмы нужно иллюстрировать псевдокодом, как например, это сделано в Тест Миллера-Рабина. Тогда вопрос предпочтения языка снимется сам собой. Maxal 14:26, 11 ноября 2010 (UTC)
- Во-первых, код написан мной, а не абы кем, и ссылку на него я дать не смогу. Если вы сомневаетесь в моей квалификации или в правильности кода, можете взять Pascal или Delphi и проверить (я проверял, он работает). Если не умеете программировать, можно попросить еще кого-нибудь, кто умеет... Во-вторых, это ваше личное мнение, что алгоритмы необходимо иллюстрировать псевдокодом, или вы можете поделиться ссылкой на ВП:ПУ? В программе на псевдокоде сложнее найти ошибку, т.к. ее невозможно напрямую подвергнуть отладке... В третьих, в вы сами ВП:АИ читали? Там ни слова не сказано о коде программ, зато есть вот что:
Если вы сомневаетесь в достоверности какой-либо информации, но не имеете полной, основанной на источниках уверенности в ошибке, не следует сразу удалять сомнительный фрагмент, так как некоторые участники могут обвинить вас в том, что вы не дали им шанса на улучшение статьи (в целом это производит впечатление агрессивных действий). Поэтому лучше ставить после сомнительных высказываний шаблон {{нет источника}}. Удалять сомнительную информацию (без достоверных источников) следует лишь в том случае, если вы уверены в том, что она неверна, или если на шаблон {{нет источника}} не было реакции в течение как минимум двух недель. Также возможно удаление сомнительной информации, если к такому решению авторы статьи придут в обсуждении.
- Прошу перестать откатывать мою правку (по крайней мере до завершения обсуждения)...
- Во-первых, да, я сомневаюсь в вашей квалификации, пока она не подтверждена независимыми ВП:АИ. И работа кода на каком-то примере не доказывает его правильность. Во-вторых, предупреждаю вас о ВП:ЭП. В третьих, вы сами признались, что код лично ваш (что попахивает ВП:ОРИСС). Но как бы там ни было, пусть код побудет пару недель, но если вы не приведете для него ВП:АИ, он будет удален. Maxal 16:59, 11 ноября 2010 (UTC)
- Во-первых, код написан мной, а не абы кем, и ссылку на него я дать не смогу. Если вы сомневаетесь в моей квалификации или в правильности кода, можете взять Pascal или Delphi и проверить (я проверял, он работает). Если не умеете программировать, можно попросить еще кого-нибудь, кто умеет... Во-вторых, это ваше личное мнение, что алгоритмы необходимо иллюстрировать псевдокодом, или вы можете поделиться ссылкой на ВП:ПУ? В программе на псевдокоде сложнее найти ошибку, т.к. ее невозможно напрямую подвергнуть отладке... В третьих, в вы сами ВП:АИ читали? Там ни слова не сказано о коде программ, зато есть вот что: