Najmenší súčet divisors

0

Otázka

Dané je celé číslo n <= 10^18, ktoré je produktom Fibonacciho čísla, potrebujem faktor, a to do uvedenej Fibonacciho čísla.

Každý factorization má skóre, ktoré je o jedno menej ako počet faktorov plus súčet indexov faktorov v Fibonacciho postupnosť, ktorá začína s f(1) = 1, f(2) = 2.

Ak je viac takýchto factorizations sú možné, potrebujem factorization, ktoré minimalizuje skóre.

Príklad:

104 = 13 * 8 alebo 104 = 13 * 2 * 2 * 2

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

Pre 104 = 13*8 = f(6)*f(5), máme počítať po 2, indexov 6 a 5, dáva nám 2 + 6 + 5 - 1 = 12.

Pre 104 = 13 * 2 * 2 * 2 = f(6) * f(2) * f(2) * f(2), máme počte 4 a indexov 6, 2, 2, 2, dáva nám 4 + 6 + 2 + 2 + 2 - 1 = 15.

Mali by sme sa vybrať 13 * 8, pretože má nižšie skóre.

Najväčší problém som narazil je, keď máme číslo ako 1008, ktoré je deliteľné 144 a 21, ale musí byť rozdelená do 21 pretože 1008 % 7 == 0. Pretože môj program je v prvom delení najväčšie čísla, číslo 144, je "kradnúť' 3 z počtu 21, takže môj program nenájde riešenie.

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

Najlepšiu odpoveď

0

Carmichael je vety preukáže, že každý Fibonacciho čísla po 144 má aspoň jedno prvočíslo deliteľ, že nemá rozdeliť staršiu Fibonacciho číslo.

Nie je veľa Fibonacciho čísla do 10^18; menej ako 90.

Aby sa pole všetkých Fibonacciho čísla <= 10^18.

Vzhľadom na vstup n, ktoré je produktom Fibonacciho čísla, jeho factorization do Fibonacciho čísla musí obsahovať každý Fibonacciho číslo vyššie 144, ktorý rozdeľuje to, opakuje toľkokrát, koľkokrát je to deliť sa.

Prejsť vašich Fibonacciho čísla zostupne a udržať delení n pri každej takejto číslo, ktoré delí to, až sa dostanete na 144.

Teraz musíme byť opatrní, pretože dve Fibonacciho čísla nemajú primárnych faktorov, ktoré nie je vidieť v predchádzajúcich Fibonacciho čísla. Tieto sú 8 a 144. Od 8 je 2^3 a 2 je Fibonacciho číslo, môžete si spôsobiť, že vaše číslo unfactorable do Fibonacciho čísla, berúc 8. Pod optimalizácia, budete vždy vybrať 8.

Potom 144 je jediný faktor, ktorý by ste mohli potrebovať, ak chcete odmietnuť pre menšie faktor. To sa môže stať iba v prípade, 34 21 sú faktory, a 144 sa eliminuje potrebné 2 alebo 3.

34 = 2 * 17, 21 = 3 * 7

Že bol rozvláčny, ale dostane sa nám na jednoduchý prístup.

Prejsť Fibonacciho čísla <= n v zostupnom poradí, kým sa dostanete na 144, potom prejdite na 34, potom 21, a potom späť na 144 a zostupné dole: 2.

To vám poskytne optimálne factorization podľa vašej divný bodovací systém.

----- toto poradie ----- [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

Dôvod, prečo robíme 34 a 21 von, aby sa zabezpečilo, že pomocou 144 doesn 'použite up' 2s a 3 kyselín, musíme deliť sa 17s a 7s, že môžeme urobiť len pomocou 34 a 21s.
Dave

V iných jazykoch

Táto stránka je v iných jazykoch

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