|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.10.2008, 02:27 | #1 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
Задача в Delphi
По заданному целому A (0< A< 1.000.000.000) найти минимальное N, при котором N**N (N в степени N) будет делиться на A без остатка. Надо написать программу,которая будет работать эффективнее, чем простой перебор всех значений N.
Я написала что-то,но если вводить большие числа,то программа всё равно тормозит и зависает на некоторое время...а этого не хочется... Вот моя программа: procedure TForm1.Button1Click(Sender: TObject); var d,d2,i,l,k,k1,s1,p,s,j:integer; max:real; n1:longint; a:array of integer; b:array of real; begin if SpinEdit1.Value=1 then Label3.Caption:='1' else begin with SpinEdit1 do begin s:=0; for d:=2 to Value do if Value mod d=0 then begin l:=2; for d2:=2 to d div 2 do if d mod d2=0 then l:=l+1; if l=2 then s:=s+1; end; end; SetLength(a,s); i:=0; with SpinEdit1 do for d:=2 to Value do if Value mod d=0 then begin l:=2; for d2:=2 to d div 2 do if d mod d2=0 then l:=l+1; if l=2 then begin a[i]:=d; i:=i+1; end; end; SetLength(b,s); k:=0; for i:=0 to high(a) do begin s1:=0; k1:=SpinEdit1.Value; while k1 mod a[i]=0 do begin s1:=s1+1; k1:=k1 div a[i]; end; b[k]:=s1; k:=k+1; end; max:=b[0];p:=0; for j:=1 to high(b) do if b[j]>max then begin max:=b[j]; //p:=j; end; n1:=a[0]; for i:=1 to high(a) do n1:=n1*a[i]; if n1>=max then Label3.Caption:=IntToStr(n1) else while n1<max do begin for i:=0 to high(a) do begin n1:=n1*a[i]; b[i]:=b[i]/a[i]; max:=b[i]; end; Label3.Caption:=IntToStr(n1); end; end; Подскажите,пожалуйста способ заставить программу работать быстрее,если это возможно. |
25.10.2008, 11:52 | #2 |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 239
|
извините...... лень разбираться в вашем коде...... напишите теор. решение.
Надо бы избавиться от привычки ставить многоточие.....
|
25.10.2008, 12:28 | #3 |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 239
|
предлагаю следущее решение:
1. Разбить число A на простые множители. к примеру если A=24, то эти множители 2*2*2*3 2. запонить колличество максимально встреченных множителей (k) и сам элемент(m). Для A=24, такой множитель "2" встречается 3 раза.... 3. перемножить между собой все различные множители... 2*3=6 4. если полученное число меньше k то домножить его на m и повторить пункт 4 Вытоге получим число N
Надо бы избавиться от привычки ставить многоточие.....
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на Delphi | evrey | Общие вопросы Delphi | 1 | 01.06.2008 20:37 |
Задача в DELPHI. | Absent | Помощь студентам | 7 | 25.02.2008 14:04 |
Задача в Delphi | Oksana11 | Помощь студентам | 3 | 22.12.2007 00:12 |
Задача на Delphi | Gorinicher | Помощь студентам | 17 | 22.10.2007 21:49 |