
Kolyann
23.12.2015
22:29:17
а вообще, формула для n-го дома
начнём с частного случая - 3

Artem
23.12.2015
22:29:53
не, с формулой n-ного дома будет слишком долго, я пробовал уже

Kolyann
23.12.2015
22:30:26
ну да, это всё о разложении на множители

Google

Artem
23.12.2015
22:30:34
вот так с numpy
delivering presents
[#######-----------------------------] 19% 0d 00:03:05

Kolyann
23.12.2015
22:30:49
не помню как функция зовётся, вроде функция делителей

Artem
23.12.2015
22:31:09
это из квантового мира что-то :)

Kolyann
23.12.2015
22:32:22
скорее из теории чисел
https://ru.wikipedia.org/wiki/Функция_делителей

Artem
23.12.2015
22:34:58
решил, в общем смотри, конецпция такая:
limit = 36000000
presents = np.zeros(limit // 10)
for elf in np.arange(1, limit // 10):
presents[elf::elf] += elf * 10

Kolyann
23.12.2015
22:36:50
можно нарыть последовательность функции делителей
и тупо пройтись уже по ней, проверяя сумму членов на каждом шагу

Elena
23.12.2015
22:37:22

Nikita
23.12.2015
22:37:38
У тебя кота зовут Артём?
))))))

Kolyann
23.12.2015
22:37:47
т.е. даже и не считать сколько там эльфы доставили

Google

Kolyann
23.12.2015
22:38:19
грязные хаки, конечно

Artem
23.12.2015
22:38:24

Elena
23.12.2015
22:39:19

Kolyann
23.12.2015
22:39:27
https://oeis.org/A000203

Artem
23.12.2015
22:39:30
в project euler много таких задач, которые без математической оптимизации будут считаться сутками, а при должном умении их можно на листочке решить

Kolyann
23.12.2015
22:39:42
ога, игрался немного с ним

Nikita
23.12.2015
22:40:00
угу

Kolyann
23.12.2015
22:40:02
правда забил потому что у меня задачи делились строго пополам
либо нихера не понятно, либо вроде и ничего
но особо заморачиваться не хочется

Artem
23.12.2015
22:40:29
но я последний раз больше года назад оттуда что-то решал

Kolyann
23.12.2015
22:40:33
кинь ссылку плиз

Artem
23.12.2015
22:40:41
projecteuler.net

Kolyann
23.12.2015
22:41:40
о прикольно
когда последний раз заходил там ещё не было формы ввода ответов
тупо вопросы
о, а вот и функция делителей :D
https://oeis.org/A034885/b034885.txt
ой фак эт не она(

Artem
23.12.2015
22:49:51
там 300 мб цифр будет, даже если ты найдешь

Google

Kolyann
23.12.2015
22:49:58
нет)
я нашёл какую-то левую функцию
там f(600) > 10^10

Artem
23.12.2015
22:51:17
мне кажется, лучше зайти с другого конца и делать слайсами с шагом номера эльфа, чем считать делители

Kolyann
23.12.2015
22:51:31
так это и есть делители
к 10 дому подойдут только 1, 2, 5 и 10 эльфы
1+2+5+10 = 18
sigma(10) = 18

Artem
23.12.2015
22:52:08
ну вот и надо по эльфам итерироваться, а не по домам

Kolyann
23.12.2015
22:52:21
я говорю о том что надо вообще не итерироваться :D
а найти ЁБАНУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ ГДЕ ОНА
https://oeis.org/A000203
кто-нибудь видит на странице ссылку на последовательность?

Artem
23.12.2015
22:53:55
ага, апи для последовательностей

Kolyann
23.12.2015
22:55:56
https://oeis.org/A000203/b000203.txt
ага, попалась
ы
там не хватает
а ещё чо прикольно - степень двойки даёт чётко выверенный ответ
f(x) = 2^x - 10

Google

Kolyann
23.12.2015
22:59:16
f(2) = 30
f(4) = 70
ой тьфу
2^(x+1) - 10
f(2^3) = 15
House 8 got 150 presents
десятки смутили и спать пора

Artem
23.12.2015
23:01:28
погоди, щас сигму тебе скину

Kolyann
23.12.2015
23:01:30
таким образом отправную точку отсчёта вообще перебирать не надо, находится за логарифм
я всё равно не увижу
я уже вырубаюсь)

Artem
23.12.2015
23:02:08
там скачет сильно результат, поэтому отправная точно сильно примерна

Kolyann
23.12.2015
23:02:26
отправная в любом случае считается за логарифмическое время
у меня вот найти больше 3 400 000, делим на 10 (т.к. эльфы носят по 10 подарков) получаем 340 000
2^(x+1) - 1 > 340 000
x+1 > log2(340 000)

Artem
23.12.2015
23:03:53
а у меня 36 млн, лол

Kolyann
23.12.2015
23:04:11
ну считай ещё 3 шага от меня
4
log2(340000) = 18

Google

Kolyann
23.12.2015
23:05:07
x = 2^17
т.е. ответ находится где-то между 2^16 и 2^17 (для меня)
для тебя между 2^20 и 2^21
±порядок

Artem
23.12.2015
23:07:16
тут сигма до 3,6 млн, так как эльфы носят по 10, точно хватит

Kolyann
23.12.2015
23:07:30
:D

Artem
23.12.2015
23:07:56
распакуй, а потом загружай так:
sigma = numpy.loadtxt('sigma.txt')

Kolyann
23.12.2015
23:09:01
а, у меня 34 миллиона
нолики уже слипаются

Artem
23.12.2015
23:09:11

Kolyann
23.12.2015
23:09:53
786240
±порядок
пасиба за сигму

Artem
23.12.2015
23:10:33
мне кажется, она загружаться только минуту будет :)

Kolyann
23.12.2015
23:10:46
в notepad++ открылась моментально
part 2
...each Elf will stop after delivering presents to 50 houses...
ага, ага, ясно, понятно, спасибо, я, пожалуй, пойду спать
у тебя ответ я так понимаю 831600

Artem
23.12.2015
23:12:42
ага