matematykaszkolna.pl
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 ? emotka
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 emotka
23 cze 01:27