La série harmonique alternée est une série convergente bien connue.
"Clairement", il est évident qu'il converge vers le logarithme naturel de 2. Ou est-ce le cas?
Puisque la série n'est pas absolument convergente , en réorganisant simplement les termes, je peux la faire approcher de tout ce que je veux. Supposons que je veuille que la série converge vers e . Tout ce que je devrais faire, c'est ceci:
Si vous n'avez pas saisi le motif, il n'y en a pas d'évident. Voici comment ça fonctionne:
- Considérez les termes de la série harmonique alternée en termes de termes positifs et négatifs.
- Additionnez juste assez de termes positifs pour dépasser notre objectif (e). (aka
sum > target
) - Soustrayez le prochain terme négatif.
- Revenez à 2.
Notez qu'à l'étape 2, si notre sum == target
, vous devez ajouter un autre terme positif.
À partir de cela, nous pouvons définir une séquence associée à chaque numéro comme suit:
- Suivez l'algorithme ci-dessus
- Pour chaque terme positif, sortie 1.
- Pour chaque terme négatif, affichez 0.
Appelons cette séquence le "motif binaire harmonieux" d'un nombre. Par exemple, le RAP de e commence comme suit:
1, 1, 1, 1, <32 times>, 0, 1, 1, <54 times>, 0, 1, 1, ...
Votre défi:
Vous recevrez:
- une cible d' entrée rationnelle dans la gamme [-10, 10] (note: même atteindre 10 via la série harmonique prend plusieurs millions de termes). Cela peut être une décimale (aka
1.1
) ou vous pouvez prendre un rationnel directement (aka12/100
) - une entrée
int
n positive , spécifiant le nombre de termes du modèle de bit harmonique à sortir.
Vous devez générer le modèle de bits harmonieux exact de la cible selon le nombre de termes spécifié. Vous pouvez sortir des valeurs séparées par des espaces, séparées par des virgules, pas de séparation, etc; tant que le motif de 0 et de 1 est clairement visible et est lu de gauche à droite avec une séparation cohérente.
Cas de test
>>> 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
Notez que puisque -9.8
est si grand, le premier 1
qui serait sorti est quelque part autour du 149496620
e terme (qui a été calculé via des flottants, donc la valeur peut ne pas être exacte).
h a p q
au lieu d'h p q a
enregistrer un octet.Python 3,
128124 octetsCela utilise la
Fraction
classe de Python .la source
'x'*int(input())
?