Серия чередующихся гармоник - хорошо известная сходящаяся серия.
«Понятно», очевидно, что оно сходится к натуральному логарифму 2. Или так?
Поскольку ряд не является абсолютно сходящимся , просто переставляя термины, я могу сделать так, чтобы он подходил ко всему, что я хочу. Предположим, я хочу, чтобы ряд сходился к e . Все, что мне нужно сделать, это:
Если вы не уловили шаблон, не существует очевидного. Вот как это работает:
- Рассмотрим члены ряда чередующихся гармоник в терминах положительных и отрицательных членов.
- Добавьте вместе достаточно положительных условий, чтобы превзойти нашу цель (е). (иначе
sum > target
) - Вычтите следующий отрицательный член.
- Вернитесь к 2.
Обратите внимание, что на шаге 2, если наш sum == target
, вы должны добавить еще один положительный термин.
Из этого мы можем определить последовательность, связанную с каждым числом следующим образом:
- Следуйте алгоритму выше
- Для каждого положительного члена выведите 1.
- Для каждого отрицательного члена выведите 0.
Давайте назовем эту последовательность «Гармоничным битовым шаблоном» числа. Например, HBP e начинается как:
1, 1, 1, 1, <32 times>, 0, 1, 1, <54 times>, 0, 1, 1, ...
Ваша задача:
Вам будет предоставлено:
- рациональная входная цель в диапазоне [-10, 10] (примечание: даже достижение 10 через ряд гармоник занимает много миллионов терминов). Это может быть десятичная дробь (ака
1.1
) или вы можете принять рациональное напрямую (ака12/100
) - положительный
int
n- вход, определяющий количество членов гармонического битового шаблона для вывода.
Ожидается, что вы выведите точный гармонический битовый паттерн цели с указанным количеством терминов. Вы можете выводить разделенные пробелами значения, разделенные запятыми, без разделения и т.д .; до тех пор, пока последовательность 0 и 1 ясно видна и читается слева направо с постоянным разделением.
Тестовые случаи
>>> 0, 1
1
>>> 0, 2
10
>>> 0, 7
1000010
>>> 1, 10
1101011011
>>> 1.01, 3
110
>>> 1.01, 24
110101101101101101101101
>>> 2.71, 32
11111111111111111111111111111111
>>> 2.71, 144
111111111111111111111111111111110111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111
>>> -9.8, 100
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Обратите внимание, что, поскольку -9.8
он настолько велик, первое, 1
что будет выведено, находится где-то вокруг 149496620
th-го члена (который был вычислен с помощью чисел с плавающей запятой, поэтому значение может быть не точным).
h a p q
вместоh p q a
сохранения байта.