fixfix
2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 62, 63, 64, 65, 66, 67, 68 ... 88  След.
 
 Re: Factorials
Сообщение23.04.2013, 16:02 
Заблокирован


21/04/13

78
Pavlovsky в сообщении #714580 писал(а):

(Оффтоп)


К тому, что я написал только что выше, мне добавить нечего, разве что дам Вам один дельный совет: не пыжтесь, а то лопните, да так, что и мокрого места не останется.

 Профиль  
                  
 
 Re: Factorials
Сообщение23.04.2013, 16:24 
Аватара пользователя


21/02/10
1594
Екатеринбург
wanderers в сообщении #714579 писал(а):
мой алгоритм будет опубликован в уважаемом издании, к которому таких, как Вы, и на пушечный выстрел не подпускают.

Скажите хоть название журнала.

 Профиль  
                  
 
 Re: Factorials
Сообщение23.04.2013, 18:12 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов

(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение23.04.2013, 19:01 
Заслуженный участник
Аватара пользователя


19/12/10
1546

(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение23.04.2013, 19:32 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов

(Оффтоп)



-- Вт апр 23, 2013 20:53:20 --

whitefox в сообщении #714670 писал(а):

(Оффтоп)


(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 04:13 
Аватара пользователя


01/06/12
1016
Adelaide, Australia
Друзья, ну зачем ругаться? Мы тут все занимаемся любимым делом - решаем интересную задачу. Предлагаю вернуться к оригинальной теме.

Кто нибудь пробовал искать решения с конца? У меня были идеи, но я их так и не закодил. Например можно начать с N! и рекурсивно разбивать числа на два фактора. Причем чем ближе факторы по размеру тем лучше:

6!=720=24*30
---
24=4*6
30=5*6
---
4=2*2
6=2*3
5=2+3
---
2=1+1
3=1+2

Получается вот такое решение: 1, 2, 3, 4, 5, 6, 24, 30, 720

7!=5040=70*72
70=7*10
72=8*9
...

Получается 1,2,3,4,7,8,9,10,70,72,5040.

-- 24.04.2013, 10:02 --

Кто нибудь начал решать 1000!? Я выкладываю свои решения для N=100 и N=200. Оптимальное решение они не дадут но должны помочь:

(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 05:12 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Я много раз пользовалась таким простым приёмом, как домножение.
При этом переход делала не только от (N-1)! к N!, но и от от (N-m)! к N!, m>1.

Покажу один пример - получение решения для 37! от оптимального решения для 30!
Это оптимальное решение для 30! в 17 шагов:

Код:
1,2,4,6,36,216,180,176,6336,6120,1140480,1146600,25344,25346,155117520,1307674368000,
1710012252724199424000000,265252859812191058636308480000000

Домножать здесь нужно на число

$31 \cdot 32 \cdot 33 \cdot 34 \cdot 35 \cdot 36 \cdot 37=51889178880$

Даже не надеялась, что можно выполнить домножение на такое большое число, но попробовала и... получилось.
В качестве начальной последовательности берётся решение для 30! без двух последних членов:

Код:
1,2,4,6,36,216,180,176,6336,6120,1140480,1146600,25344,25346,155117520,
1307674368000

От этой последовательности ищется число 51889178880. Это удаётся сделать за 5 шагов.

Код:
1,2,4,6,36,216,180,176,6336,6120,1140480,1146600,25344,25346,155117520,
1307674368000,217,6512,1328040,8648196480,51889178880

Добавляем к последовательности два последних члена из решения для 30! и выполняем последнее умножение. Готовое решение для 37! в 23 шага:

Код:
1,2,4,6,36,216,180,176,6336,6120,1140480,1146600,25344,25346,155117520,
1307674368000,217,6512,1328040,8648196480,51889178880,1710012252724199424000000,
265252859812191058636308480000000,
13763753091226345046315979581580902400000000

Конечно, решение не ахти (плюс 3 от оптимального), но всё равно хорошо. Это решение я получила как только нашла оптимальное решение для 30!
Уже перед самым концом конкурса (19 апреля) мне удалось улучшить его на 1 шаг:

Код:
1,2,3,9,81,72,70,140,221,5040,362880,80196480,79833600,30940,30868,25900,420,
12964560,12964479,335780006100,6402373705728000,
40990389067797283140009984000000, 13763753091226345046315979581580902400000000

Ну, а домножение на меньшие числа (m=2, m=3, m=4...) выполнялось гораздо проще, если вообще было возможно.
Когда были найдены оптимальные решения для N=25,26,30, попробовала все варианты домножений, чтобы найти решения для бОльших N.

 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 05:55 
Заслуженный участник
Аватара пользователя


19/12/10
1546
dimkadimon в сообщении #714835 писал(а):
Кто нибудь пробовал искать решения с конца? У меня были идеи, но я их так и не закодил. Например можно начать с N! и рекурсивно разбивать числа на два фактора

А алгоритм №1 Nataly-Mak и его модификации разве не относятся к этой категории?
Там ведь тоже в начале N! разбивается на множители $\mathrm N! =\mathrm A\cdot\mathrm B\cdot\mathrm B$
Но дальнейшая рекурсия не выполняется, так как один из множителей, обычно, принадлежит имеющейся базе данных, а второй получается коротким достраиванием.
Если же ни один из множителей базе данных не принадлежит, либо достраивание слишком длинное, то тогда и выполняется рекурсия.

 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 06:36 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов

(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 06:50 
Заблокирован


21/04/13

78
wanderers в сообщении #713853 писал(а):
wanderers в сообщении #713672 писал(а):
Вроде все приведенные решения для больших n вписываются в две формулы: n!=a*c^2 и n!=(x*a)(x*a-a)*y или n!=(x*a)(x*a+a)*y...

Вообще говоря, при решении задачи более "длинных", чем unsigned __int64 переменных не требуется. Но при генерации таблиц по приведенным формулам для больших n это не так. Для этого я использовал long double с учетверенной точностью собстсвенной разработки (замечу, что для этого компилятор мелкомягких не годится), т.к. фортрановский компилятор интела хоть и поддерживает учетверенную точность, но с их подходом к реализации этой самой учетверенной точности можно эти таблицы сто лет строить. На первый взгляд, например, 37! не засунуть в переменную моей реализации, но это не так: ведь все степени двойки "прячутся" в показатели степени!!! В моей реализации учетверенной точности под мантиссу отводится 126 бит, которые в целочисленном случае все и используются, тогда как у интела под мантиссу отводится всего 112 бит и при этом моя реализация "пашет" раз в 15 быстрей!

 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 06:54 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов

(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 07:21 
Заблокирован


21/04/13

78
dimkadimon в сообщении #714446 писал(а):
whitefox, в настоящем споре я вас не очень понимаю. Вроде wanderers уже описал свой алгоритм: использовать формулы n!=a*c^2 и n!=(x*a)(x*a-a)*y. Я не очень разобрался в генерации базы данных но видимо алгоритм достаточно быстрый если он смог найти N=31 за пол часа на 14 ядрах. Или я что то не так понял?

Дима, киньте Ваше мыло мне в личку: как только мое железо освободится, перешлю Вам то, что обещал.

 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 07:45 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов

(Оффтоп)


 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 08:12 
Заслуженный участник
Аватара пользователя


19/12/10
1546

(Оффтоп)



-- 24 апр 2013, 09:40 --

И снова Gerbicz
Код:
10    .274    Raw Score = 1000    Adelaide, Australia

Дойдёт ли он до 250 шагов?

 Профиль  
                  
 
 Re: Factorials
Сообщение24.04.2013, 08:55 
Аватара пользователя


21/02/10
1594
Екатеринбург
dimkadimon в сообщении #714835 писал(а):
Кто нибудь пробовал искать решения с конца?


Сначала я пытался реализовать этот подход. Первые мои результаты были получены именно этим подходом.

1) Разложение на множители. Чтобы избавиться от дублей, в разложении A=B*C, число B обявлялось неделимым. То есть в дальнейшем с ним нельзя делать операцию разложения на множители.
2) Операции вычитания и сложения. При операции вычитания возникает опасность зацикливния. То есть сначала мы определяем A=B-C. А когда настает черед числа B мы его можем представить B=A+C. Прямая проверка этой ситуации получается слишком затратной. К тому же вариантов разложения A=B+C слишком много. Поэтому операции сложения и вычитания в чистом виде я запретил. А использовал разложение A=B*C+D;A=B*C-D. Где D<<B,C.
3) Для болших N использовал начальное разложение. N!=AB^2, где B максимальное возможное. Для очень больших N использовал это разложение дважды.

Такой подход позволил получить результаты на уровне 0,8 балла.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1310 ]  На страницу Пред.  1 ... 62, 63, 64, 65, 66, 67, 68 ... 88  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group