Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 11.05.2016
Сообщений: 42

Метод Лемана (разложение на множители)

12.11.2016, 11:39. Показов 2046. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  N,dd,n1:integer;
 
implementation
 
{$R *.dfm}
 
function NOD(C, N:integer):integer; // 1ая Функция нахождения наибольшего общего делителя
begin
If C<>0 then NOD:= NOD(N mod C,C) else NOD:= N;
End;
 
 
{ Если N является простым, функция вернет -1 }
function GetLehmanFactor(N: Integer): Integer;
var
  I, k, d, A, B,C, t, dd: Integer;
begin
  Result := -1;
 
  { Проверка делителей до n^(1/3) }
  for I := 2 to Trunc((1/3)*Ln(N)) do
    if N mod I = 0 then begin
      Result := I;
      exit;
    end;
 
  for k := 1 to Trunc((1/3)*Ln(N)) do
    for d := 0 to Trunc((1/6)*(N) / (4 * Sqrt(k))) + 1 do begin
      A := Trunc(Sqrt(4*k*N)) + d;
      t := Sqr(A) - 4*k*N;
 
      if t < 0 then
        continue;
 
      B := Trunc(Sqrt(t));
      if Sqr(B) = t then begin
        ASSERT( (A+B)*(A-B) mod N = 0 );    { Всегда выполняется }
         C:=A-B;
        dd := NOD(C, N);
 
        if (1 > dd) and (dd < N) then begin
          Result := dd;
          exit;
        end;
      end;
    end;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
[B]N:=StrToInt(Edit1.Text);
dd:=Trunc(dd);
n1:=N/dd;
[/B]
 
ShowMessage(IntToStr(N)+'='+IntToStr(dd)+'*'+IntToStr(n1));
end;
 
end.

метод Лемана (разложение а множители) в Делфи. в выделенной области как вывести результат???
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2016, 11:39
Ответы с готовыми решениями:

Разложение числа на множители
Дано натуральное число. Напечатать разложение этого числа на простые множители. Реализовать два варианта: a) каждый простой множитель...

Разложение числа на простые множители
Дано натуральное число K. Составить программу разложения этого числа на простые множители. Каждый множитель должен выводиться столько раз,...

Разложение положительного целого числа на элементарные множители.
привет всем! я чайник, студент. Задание на курсовой проект: &quot;Разработайте алгоритм, код и интерфейс электронного пакета, выполняющий...

24
0 / 0 / 1
Регистрация: 11.05.2016
Сообщений: 42
14.11.2016, 18:32  [ТС]
Студворк — интернет-сервис помощи студентам
а как можно отказаться от дробной части? и какой переменной?
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
14.11.2016, 18:40
Да вы, батенька, совсем в материале плаваете... Отказаться от дробной части можно волевым решением и применением div вместо символа деления /. Либо функцией round модуля Math.

Завтра с вами плотно пообщаемся и повысим ваш уровень грамотности.
0
5996 / 4571 / 1096
Регистрация: 29.08.2013
Сообщений: 28,229
Записей в блоге: 3
14.11.2016, 18:56
вот смотри

ты либо при делении округляешь до целого (ФУНКЦИЕЙ round) и тогда получается запихать в Integer

либо при преобразовании дробного в строку пиши не IntToStr, а FloatToStr
0
0 / 0 / 1
Регистрация: 11.05.2016
Сообщений: 42
14.11.2016, 19:05  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button3Click(Sender: TObject);
var dd,N,n1:integer;
 
begin
N:=StrToInt(Edit1.Text);
n1:=round(N/dd);
if N>8 and (N mod 2=1) then //<<==  Тут ТС хотел к чему-то привлечь внимание
Edit2.Text:=Edit2.Text+IntToStr(N)+'='+IntToStr(dd)+'*'+IntToStr(n1)
else ShowMessage('Введите натуральное нечётное число N > 8');
end;
ну вот я округлил
теперь выдаёт ошибку в выделенной строке
[DCC Error] Unit1.pas(126): E2015 Operator not applicable to this operand type

Добавлено через 2 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button3Click(Sender: TObject);
var dd,N,n1:integer;
 
begin
[B]N:=StrToFloat(Edit1.Text);[/B]
n1:=N/dd;
if N>8 and (N mod 2=1) then
Edit2.Text:=Edit2.Text+FloatToStr(N)+'='+IntToStr(dd)+'*'+IntToStr(n1)
else ShowMessage('Введите натуральное нечётное число N > 8');
end;
а используя FloatToStr выдаёт ошибку
[DCC Error] Unit1.pas(124): E2010 Incompatible types: 'Integer' and 'Extended'
[DCC Error] Unit1.pas(125): E2010 Incompatible types: 'Integer' and 'Extended'
[DCC Error] Unit1.pas(126): E2015 Operator not applicable to this operand type
0
5996 / 4571 / 1096
Регистрация: 29.08.2013
Сообщений: 28,229
Записей в блоге: 3
14.11.2016, 19:41
вам бы книжки почитать, а потом уже лезть что-то делать

Delphi
1
2
3
4
5
6
7
8
9
10
var dd,N,n1:integer;
begin
  N:=StrToInt(Trim(Edit1.Text));
  n1:=round(N/dd);
  if N>8 then
  begin
   if (N mod 2)=1 then Edit2.Text:=Edit2.Text+IntToStr(N)+'='+IntToStr(dd)+'*'+IntToStr(n1)
  end
    else ShowMessage('Введите натуральное нечётное число N > 8');
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2016, 19:41
Помогаю со студенческими работами здесь

Разработать алгоритм разложение числа на простые множители
В Делфи надо срочно. ПОМОГГИИТТЕЕ. Разработать алгоритм разложение числа на простые множители. Пример я вожу 25. он мне в ответ...

Разложение на множители (метод Ферма)
Здравствуйте, есть часть кода, нужно его дописать, учусь на заочном с Pascal'ем на грубое &quot;ВЫ&quot;, буду очень признательна за...

Метод Гаусса - разложение на множители
Метод Гаусса - разложение на множители - ЭТО ТО, ЧТО НИЖЕ? Подскажите, пожалуйста. LU-разложение — это представление матрицы A в виде...

Разложение на множители
добрый день! являюсь студентом 1-го курса, по инфе проходим visual basic. раньше задавали простые для меня задачи, сейчас задали с которым...

Разложение на множители
Дано натуральное число n&gt;1. Выведите все простые множители этого числа в порядке неубывания с учетом кратности. Заранее спасибо ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru