system
mit:
Jak przedstawić 7−cyfrową liczbę w systemie :
a0*30+a1*31+...+an*3n
ai∊{0,1,−1}
na przykład:
1074713, jest na to jakiś sposób ?
23 cze 00:28
jc: 1074713 = 7*153530+3, ostatnia cyfra = 3
153530 = 7*2192+6, przedostatnia cyfra = 6
2192 = 7*313 + 1
313 = 7*44 + 5
44 = 7*6 + 2
625163
23 cze 00:35
mit: Dlaczego akurat mnożysz przez 7 ?
23 cze 00:36
mit: A poza tym ai∊{−1,0,1} Więc niezbyt.
23 cze 00:38
Blee:
10 = 9 + 1 = 32 + 30
100 = (9+1)2 = 34 + 2*32 + 30
1'000'000 = (9+1)6 = 312 = 6*310 + 15*38 + 20*36 + 15*34 + 6*32 + 30
70'000 = 7*10'000 = 7*(32 + 30)4 = ...
4'000 = 4*1'000 = ...
700 = 7*100 = ...
13 = 4*3 + 1 = ...
później ai wystarczy zamienić aby pasował do danych
23 cze 00:39
jc: Bo zobaczyłem 7 w treści zadania. Oczywiście miało być 3.
Ale reguła jest taka sama.
Znajdujesz resztę z dzielenia przez 3, zapisujesz, zastępujesz liczbę ilorazem.
I tak do końca.
1074713, reszta = 2, ...
23 cze 00:41
mit: Nie wiem czy zauważyłeś że nie chodzi tu o zwykły system trójkowy
23 cze 00:44
jc: Oj, jeszcze jednej rzeczy nie zauważyłem.
Jako reszty przyjmujesz liczby −1, 0, 1.
41 = 14*3 − 1
14 = 5*3 − 1
5 = 2*3−1
2=3−1
1(−1)(−1)(−1)(−1)
10 = 3*3+1
11
17=3*6−1
6=2*3+0
2=3−1
1(−1)0(−1)
23 cze 00:45
mit: No dla małych liczb takich jak 41 to nie jest problem ale co z większymi
23 cze 00:48
jc: Oto program w języku Python. Wynik czytasz wspak.
n = 1074713
while n > 0:
a = n%3
if a==2: a=−1
print a
n = (n−a)/3
23 cze 00:49
jc: Zamiast −1 pisałem m.
1074713 = 1m001mm11m01mm
23 cze 00:51
mit: Dzięki za program, ale co jeśli mam przed sobą tylko kartkę, długopis i kalkulator ?
23 cze 00:52
jc: Zauważ, że dla dodatnich liczb na początku zawsze będzie 1.
23 cze 00:52
Blee:
1074713 =
312 * 1
310 * 6
38 *( 15 + 7)
36 *( 20 + 7*4 + 4)
34 *( 15 + 7*12 + 4*3 + 7)
32 *( 6 + 7*4 + 4*3 + 7*2)
31 * 4
30 * ( 1+ 7 + 4 + 7 + 1)
i teraz
30*20 = 27*30 − 9*30 + 3*30 − 1*30 = 33 − 32 + 31 − 30
31*4 = 32 + 31
32 * 60 = 81*32 − 27*32 + 9*32 − 3*32 = 36 − 35 + 34 − 33
i tak dalej
23 cze 00:53
jc: To samo. Pamiętaj, że reszta z dzielenia przez 3 = reszta z dzielenia sumy cyfr przez 3.
23 cze 00:54
mit: if a==2: a=−1
print a
Czemu taki warunek ? Skoro a będzie wynosiło 2 to na ekran wypisze mi 2, a 2∉{−1,0,1}
23 cze 00:56
mit: Chyba że należy to czytać jeśli a=2 to staje się −1 i to wypisuje, tak ?
23 cze 00:58
jc:
Komputer liczy reszty w systemie reszt {0,1,2}. Twój system reszt to {−1,0,1}.
Dlatego 2 należy zamienić na −1.
23 cze 01:00
jc: Tak właśnie należy to czytać. Nie pisałeś nigdy żadnych programów?
23 cze 01:01
mit: Trochę pisałem, ale nie w Python z początku uznałem to za podwójny warunek
23 cze 01:03
jc: Chyba tak też będzie dobrze:
n = 1074713
while n > 0:
a = (n+1)%3 −1
print a
n = (n−a)/3
23 cze 01:09
mit: Pierwszą wersję zrozumiałem, dzięki
23 cze 01:27