Nejmenší součet dělitelů

0

Otázka

Vzhledem k tomu celé číslo n <= 10^18 let, který je produktem Fibonacciho čísla, potřebuju to rozložit do řekl, že Fibonacciho čísla.

Každý rozklad má skóre, která je o jednu menší než počet faktory plus součet indexů faktorů ve Fibonacciho posloupnosti, která začíná s f(1) = 1, f(2) = 2.

Pokud více takových faktorizace jsou možné, potřebuju rozklad, který minimalizuje skóre.

Příklad:

104 = 13 * 8 nebo 104 = 13 * 2 * 2 * 2

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

Pro 104 = 13*8 = f(6)*f(5), máme počítat, 2, indexy 6 a 5, což nám dává 2 + 6 + 5 - 1 = 12.

Pro 104 = 13 * 2 * 2 * 2 = f(6) * f(2) * f(2) * f(2), máme počítat 4 a indexy, 6, 2, 2, 2, což nám dává 4 + 6 + 2 + 2 + 2 - 1 = 15.

Měli bychom vybrat 13 * 8, protože má nižší skóre.

Největší problém jsem narazil je, že když máme číslo 1008, které je dělitelné 144 a 21, ale musí být rozdělena do 21 protože 1008 % 7 == 0. Protože můj program je první dělení největší čísla, číslo 144 je 'krádež' 3 z počtu 21 takže můj program není najít řešení.

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

Nejlepší odpověď

0

Carmichael věta dokazuje, že každé Fibonacciho číslo po 144 má alespoň jedno prvočíslo dělitelem, že není rozdělit dřívější Fibonacciho číslo.

Není mnoho Fibonacciho čísla pod 10^18; méně než 90.

Aby se pole všech Fibonacciho čísla, < = 10^18.

Vzhledem k tomu vstup n, který je produktem Fibonacciho čísla, jeho rozklad do Fibonacciho čísel, musí obsahovat každé Fibonacciho číslo výše 144, který rozděluje to, opakovat tolikrát, kolikrát, jak se to rozděluje.

Jít přes Fibonacciho čísla v sestupném pořadí a držet dělení n takové číslo, které dělí to, až se dostanete na 144.

Teď musíme být opatrní, protože dvě Fibonacciho čísla nemají žádnou hlavní faktory, které nejsou vidět v předcházejících Fibonacciho čísel. Tyto jsou 8 a 144. Protože 8 je 2^3 a 2 je Fibonacciho číslo, můžete to učinit vaše číslo unfactorable do Fibonacciho čísla tím, že 8. V rámci optimalizace, budete vždy zvolit 8.

Pak 144 není jediným faktorem, který možná budete muset odmítnout pro menší faktor. To může dojít pouze v případě, 34 nebo 21 jsou faktory, a 144 eliminuje potřeba 2 nebo 3.

34 = 2 * 17, 21 = 3 * 7

To byl rozvláčný, ale to nás dostane na jednoduchý přístup.

Jít přes Fibonacciho čísla, < = n v sestupném pořadí, až se dostanete k 144, pak přeskočit na 34, pak v 21, pak zpět na 144 a sestupuje dolů do 2.

To vám dá optimální rozklad pod zvláštní bodovací systém.

----- pořadí ----- [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, proč my 34 a 21 mimo provoz jsou, aby zajistily, že použití 144s není 'použít' 2s a 3s musíme rozdělit z 17s a 7s, že můžeme dělat jen pomocí 34 a 21.
Dave

V jiných jazycích

Tato stránka je v jiných jazycích

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