La plus petite somme des diviseurs

0

La question

Étant donné un entier n <= 10^18, qui est le produit des nombres de Fibonacci, j'ai besoin de tenir à dire les nombres de Fibonacci.

Chaque factorisation a une note, qui est un de moins que le nombre de facteurs, en plus de la somme des indices des facteurs de la suite de Fibonacci qui commence par f(1) = 1, f(2) = 2.

Si plusieurs de ces factorisations sont possible, j'ai besoin de la factorisation qui réduit le score.

Exemple:

104 = 13 * 8 ou 104 = 13 * 2 * 2 * 2

f(6) = 13, f(5) = 8, f(2) = 2

Pour 104 = 13*8 = f(6)*f(5), nous avons un nombre de 2, les indices de 6 et 5, nous donnant 2 + 6 + 5 - 1 = 12.

Pour 104 = 13 * 2 * 2 * 2 = f(6) * f(2) * f(2) * f(2), nous avons un nombre de 4 et des indices de 6, 2, 2, 2, nous donnant 4 + 6 + 2 + 2 + 2 - 1 = 15.

Nous devrions choisir 13 * 8 car il a le score le plus bas.

Le plus gros problème que j'ai rencontré est que lorsque nous avons un certain nombre comme 1008, qui est divisible par 144 et 21, mais doit être divisé par 21 en raison 1008 % 7 == 0. Parce que mon programme est tout d'abord en divisant par le plus grand nombre, numéro 144 est "volant" de 3 à partir du numéro 21 donc, mon programme ne trouve pas de solution.

algorithm division fibonacci python
2021-11-21 13:44:33
1

La meilleure réponse

0

Carmichael du théorème prouve que tous les nombres de Fibonacci après 144 a au moins un diviseur premier qui ne divise pas plus tôt le nombre de Fibonacci.

Il n'y a pas beaucoup de nombres de Fibonacci de moins de 10^18; moins de 90.

Faire un tableau de tous les nombres de Fibonacci <= 10^18.

Compte tenu de l'entrée n qui est le produit des nombres de Fibonacci, sa factorisation en nombres de Fibonacci doit inclure tous les nombres de Fibonacci au dessus de 144 qui le divise, répété autant de fois qu'il le divise.

Aller à travers vos nombres de Fibonacci dans l'ordre décroissant, et continuer à diviser n par n'importe quel numéro, qui le divise, jusqu'à ce que vous obtenez à 144.

Maintenant, nous devons être prudents parce que les deux nombres de Fibonacci n'ont pas de facteurs premiers pas vu dans les nombres de Fibonacci. Ce sont 8 et 144. Depuis le 8 est 2^3 et 2 est un nombre de Fibonacci, vous ne pouvez pas vous rendre à votre numéro de unfactorable en nombres de Fibonacci en prenant le 8. En vertu de l'optimisation de votre, vous pourrez toujours choisir de le 8.

Ensuite 144 est le seul facteur que vous pourriez avoir besoin pour rejeter pour un plus petit facteur. Cela peut arriver si 34 ou 21 sont des facteurs, et les 144 élimine le besoin de 2 ou 3.

34 = 2 * 17, 21 = 3 * 7

Qui a été de longue haleine, mais il nous amène à une approche simple.

Aller à travers les nombres de Fibonacci <= n dans l'ordre décroissant jusqu'à ce que vous obtenez à 144, puis passez à 34, puis 21, puis retour à 144 et descendant à 2.

Cela vous donnera l'optimal factorisation sous votre bizarre système de cotation.

----- cet ordre ----- [679891637638612258, 420196140727489673, 259695496911122585, 160500643816367088, 99194853094755497, 61305790721611591, 37889062373143906, 23416728348467685, 14472334024676221, 8944394323791464, 5527939700884757, 3416454622906707, 2111485077978050, 1304969544928657, 806515533049393, 498454011879264, 308061521170129, 190392490709135, 117669030460994, 72723460248141, 44945570212853, 27777890035288, 17167680177565, 10610209857723, 6557470319842, 4052739537881, 2504730781961, 1548008755920, 956722026041, 591286729879, 365435296162, 225851433717, 139583862445, 86267571272, 53316291173, 32951280099, 20365011074, 12586269025, 7778742049, 4807526976, 2971215073, 1836311903, 1134903170, 701408733, 433494437, 267914296, 165580141, 102334155, 63245986, 39088169, 24157817, 14930352, 9227465, 5702887, 3524578, 2178309, 1346269, 832040, 514229, 317811, 196418, 121393, 75025, 46368, 28657, 17711, 10946, 6765, 4181, 2584, 1597, 987, 610, 377, 233, 34, 21, 144, 89, 55, 13, 8, 5, 3, 2]

2021-11-21 22:54:18

La raison pour laquelle nous n'34 et 21 de la commande pour s'assurer que l'utilisation de 144s ne pas "utiliser" le 2s et 3s, nous avons besoin de diviser les 17 et 7s que nous ne pouvons le faire à l'aide de 34s et 21s.
Dave

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................