liczba jako suma potęg trójki
Paula: W jaki sposób przedstawić dużą liczbę naturalną jako sumę różnych potęg trójki? np 12 bilionów
albo 2 do potęgi trzydziestej
10 maj 13:26
ABC:
co rozumiesz przez sumę różnych potęg ?
dopuszczasz zapis 7=2*3
1+3
0 czy chcesz sumę ze wszystkimi współczynnikami równymi jeden ?
w tym drugim przypadku nie każda liczba da się tak zapisać
10 maj 13:38
Paula: Współczynniki mogą być tylko 0 lub 1 lub −1. Podobno można każdą
ale na udowodnienie tego to
już się zupełnie nie porywam. Wystarczyłoby umieć to zastosować
10 maj 13:44
ABC:
no niech ci będzie 230=1073741824
szukasz największej potęgi 3 mniejszej od tej liczby
318=387420489
obliczasz różnicę 230−318=686321335
różnica jest większa od 318, więc musisz brać na start 319
*** gdyby różnica była mniejsza to bierzesz 318 tu jest rozwidlenie ***
319=1162261467
różnica 319−230=88519643
patrzysz jaka tu się zmieści potęga trójki i zawsze mogą zajść dwa przypadki z różnicą i tak
schodzisz do coraz mniejszych liczb aż skończysz
10 maj 14:04
Paula: No dzięki, ale tak to bym zrobiła. Myślałam że tu jest jakiś sprytny sposób
, a tylko ja taka
niekumata i na piechotę chcę liczyć
ale dziękuję za chęć pomocy
10 maj 14:12
jc:
3517 mod 3 = 1
(3517−1)/3=1172
1172 mod 3 = −1
(1172 + 1)/3 = 391
391 mod 3 = 1
(391 − 1)/3 = 130
130 mod 3 = 1
(130−1)/3 = 43
43 mod 3 = 1
(43−1)/3=7
7 mod 3 = 1
(7−1)/3=2
2 mod = −1
− + + + + − +
−36 + 35 + 34 + 33 + 32 − 3 + 1
10 maj 14:23
10 maj 14:24
ABC:
o jc już to rozpisał nawet
10 maj 14:26
jc: 230
1 0 −1 0 −1 0 −1 1 −1 0 1 1 1 1 −1 0 1 −1 0 1
230=
1−32−34−36+37−38 + 310 + 311 + 312 + 313 − 314+316−317+319
Program w języku Python
n = 2**30
while n!=0:
t = (n+1)%3 −1
print t,
n = (n−t)/3
10 maj 14:31