introduction
Considérons une séquence d'entiers f définie comme suit:
- f (2) = 2
- Si n est un nombre impair impair, alors f (n) = (f (n-1) + f (n + 1)) / 2
- Si n = p · q est composite, alors f (n) = f (p) · f (q)
Il n'est pas très difficile de voir que f (n) = n pour chaque n ≥ 2 , et donc calculer f ne serait pas un défi très intéressant. Faisons un tour à la définition: divisez par deux le premier cas et doublez le deuxième. On obtient une nouvelle séquence g définie comme suit:
- g (2) = 1
- Si n est un nombre impair impair, alors g (n) = g (n-1) + g (n + 1)
- Si n = p · q est composite, alors g (n) = g (p) · g (q)
La tâche
Votre tâche consiste à prendre un entier n ≥ 2 en entrée et à produire g (n) en sortie. Vous n'avez pas à vous soucier du débordement d'entier, mais vous devriez pouvoir calculer correctement g (1025) = 81 , et votre algorithme devrait théoriquement fonctionner pour des entrées arbitrairement grandes.
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas gagne.
Exemple
J'ai affirmé ci-dessus que g (1025) = 81 , alors calculons-le à la main. La factorisation de 1025 donne
1025 = 5*5*41 => g(1025) = g(5)*g(5)*g(41)
Puisque 41 est premier, nous obtenons
g(41) = g(40) + g(42)
Ensuite, nous calculons les factorisations premières de 40 et 42 :
40 = 2*2*2*5 => g(40) = g(2)*g(2)*g(2)*g(5) = g(5)
42 = 2*3*7 => g(42) = g(2)*g(3)*g(7) = g(3)*g(7)
Pour ces petits nombres premiers, nous obtenons
g(3) = g(2) + g(4) = 1 + 1 = 2
g(5) = g(4) + g(6) = 1 + 2 = 3
g(7) = g(6) + g(8) = 2 + 1 = 3
Cela signifie que
g(41) = g(40) + g(42) = g(5) + g(3)*g(7) = 3 + 2*3 = 9
et
g(1025) = g(5)*g(5)*g(41) = 3*3*9 = 81
Cas de test
Voici les valeurs de g jusqu'à 50 .
2 -> 1
3 -> 2
4 -> 1
5 -> 3
6 -> 2
7 -> 3
8 -> 1
9 -> 4
10 -> 3
11 -> 5
12 -> 2
13 -> 5
14 -> 3
15 -> 6
16 -> 1
17 -> 5
18 -> 4
19 -> 7
20 -> 3
21 -> 6
22 -> 5
23 -> 7
24 -> 2
25 -> 9
26 -> 5
27 -> 8
28 -> 3
29 -> 9
30 -> 6
31 -> 7
32 -> 1
33 -> 10
34 -> 5
35 -> 9
36 -> 4
37 -> 11
38 -> 7
39 -> 10
40 -> 3
41 -> 9
42 -> 6
43 -> 11
44 -> 5
45 -> 12
46 -> 7
47 -> 9
48 -> 2
49 -> 9
50 -> 9
a(2*n) = a(n)et a(2*n+1) = a(n) + a(n+1)tient si 2*n+1est premier. Pour de nombreux autres nombres impairs, les séquences s'accordent probablement par coïncidence.
15, 21, 25, 29, 33, 41, et beaucoup plus, mais je ne trouve aucun motif réel pour expliquer pourquoi.)