Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти ближайшее квадратичное число, и остаток 
:(
    Опции темы
MBo
Дата 24.4.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



>Вы его тестировали?
Ну да. Вот пример выдачи:

Код

procedure TForm10.Button4Click(Sender: TObject);
var
  i, N, Q, QSqrt, Rem: Integer;

  procedure GetNums(N: Integer; var Q, QSqrt, Rem: Integer);
  begin
    Rem := -N;
    QSqrt := -1;
    while Rem < 0 do begin
      Inc(QSqrt, 2);
      Inc(Rem, QSqrt);
    end;
    QSqrt := QSqrt div 2;
    Q := QSqrt * QSqrt;
    if N - Q < Rem then
      Rem := N - Q
    else begin
      Q := N + Rem;
      Inc(QSqrt)
    end;
  end;

begin
  Randomize;
  Memo1.Lines.Clear;
  for i := 0 to 10 do begin
    N := 1 + Random(100);
    GetNums(N, Q, QSqrt, Rem);
    Memo1.Lines.Add(Format('%3d  =  %d  (%d*%d)   +-   %d',    [N, Q, QSqrt, QSqrt, Rem]));
  end;
end;


+-  - т.к. вычисляется модуль отклонения

 19  =  16  (4*4)   +-   3
 71  =  64  (8*8)   +-   7
 99  =  100  (10*10)   +-   1
 60  =  64  (8*8)   +-   4
 53  =  49  (7*7)   +-   4
 96  =  100  (10*10)   +-   4
100  =  100  (10*10)   +-   0
 82  =  81  (9*9)   +-   1
 97  =  100  (10*10)   +-   3
 58  =  64  (8*8)   +-   6
 53  =  49  (7*7)   +-   4 
PM MAIL   Вверх
nostromo
Дата 24.4.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: 5
Всего: 10



Да, сумма последовательных нечетных пробегает все квадраты. Каюсь, не разглядел.  
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
tishaishii
Дата 24.4.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Да, я в формуле ошибся.

0, 1
1*2-0+2=4
4*2-1+2=9
9*2-4+2=16
16*2-9+2=25
..........
и так далее всё правда.

X[i-1]*2-X[i-2]+2=X[i] 
PM MAIL ICQ Skype   Вверх
MBo
Дата 24.4.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



tishaishii, ты скажи, для чего это нужно, а то вот еще целочисленный алгоритм с 16 оборотами цикла (а не Sqrt(N))  smile 

Код

  procedure GetNums2(N: Integer; var Q, QSqrt, Rem: Integer);
  var
    OneOne, i : Integer;
  begin
    OneOne := $40000000;
    QSqrt := 0;
    Rem := N;
    for i := 0 to 15 do begin
      if Rem >= OneOne + QSqrt then begin
        Dec(Rem, OneOne + QSqrt);
        QSqrt := (QSqrt shr 1) or OneOne;
      end else
        QSqrt := QSqrt shr 1;
      OneOne := OneOne shr 2;
    end;
    Q := N - Rem;
    if Rem > QSqrt then begin
      Q := Q + (QSqrt shl 1) + 1;
      Inc(QSqrt);
      Rem := N - Q;
    end;
  end;

 
PM MAIL   Вверх
tishaishii
Дата 24.4.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



А можно что-нибудь с вышеприведённой формулой замутить?
Мне кажется, что для моей задачи div использовать противопоказано.
Вообще, как он в Delphi работает, этот div? Я думаю, подбором.

Да, уточню. Мне надо найти ближайшее квадратичное число, которое не больше данного (т.е. остаток всегда положительный).

Ну вот ещё одна формула: (k(n)^(2*m)) mod (n-1)=0, я думаю, она тоже имеет прямое отношение к этой задаче. 
PM MAIL ICQ Skype   Вверх
nostromo
Дата 24.4.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: 5
Всего: 10



Цитата

Вообще, как он в Delphi работает, этот div? Я думаю, подбором.


Скорее всего вчисления div займет 2 такта процессора (советую познакомиться с его базовым набором команд). 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
tishaishii
Дата 24.4.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



n - это система счисления такая.

MBo, ты не поверишь, мне это нужно как раз для того, о чём я уже рассказал в первом постеsmile

Я буду работать с огромными числами (десятичная запись которых занимает мегабайты). Это вычисление - часть алгоритма.

Добавлено @ 16:38 
Цитата(nostromo @ 24.4.2006,  16:35)
Цитата

Вообще, как он в Delphi работает, этот div? Я думаю, подбором.


Скорее всего вчисления div займет 2 такта процессора (советую познакомиться с его базовым набором команд).

Ну как оно работает?
Два такта никак занять не сможет, если div работает как и деление /, т.к. деление / до сих пор происходит подбором. Интересно знать формулу div (именно ту, по которой действует процессор). 
PM MAIL ICQ Skype   Вверх
nostromo
Дата 24.4.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: 5
Всего: 10



P.S. В дельфи есть возможность просмотра дизассемблерного листинга и, скорее всего, можно найти профайлер.

Добавлено @ 16:54 
Цитата

Два такта никак занять не сможет, если div работает как и деление / ...

Сейчас уточнил. Не пару тактов, но довольно мало:
idiv  

Это сообщение отредактировал(а) nostromo - 24.4.2006, 16:54
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
nostromo
Дата 24.4.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: 5
Всего: 10



Цитата

Я буду работать с огромными числами (десятичная запись которых занимает мегабайты). Это вычисление - часть алгоритма.


Я знаю только одну возможную область применения таких вещей --- теория чисел и криптография, как ее приложение. Кстати, почему вы уцепились за перебор, ведь он по сути находит квадратный корень из числа (с точностью до 1), а от корня до квадратичного числа --- одно умножение? Замечу, что эффективный алгоритм извлечения квадратного корня связан с диофантовым уравнением Пелля. 
Не желаете рассказать о задаче поподробнее?  smile   

Это сообщение отредактировал(а) nostromo - 24.4.2006, 17:08
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
tishaishii
Дата 24.4.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Моя задача связана исключительно с потешанием над числами и прочей математикой.
За страницу - спасиба. 
PM MAIL ICQ Skype   Вверх
tishaishii
Дата 24.4.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Ну так вопрос открыт. 
PM MAIL ICQ Skype   Вверх
Маг
  Дата 5.7.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



 smile И над какими задачами еще потешаешся????

ПыСы как извлекать  быстро корень не раскажеш?А то не могу найти нормального алгоритма без всяких трудностей в реализации smile  
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.