2016-09-08 20 views
7

Chcę wiedzieć, czy jest jakiś podzielna reguła w systemie binarnym na podzielenie przez 3.Jak sprawdzić, czy liczba binarna dzieli się przez 3?

Na przykład: w systemie dziesiętnym, jeżeli suma cyfr dzieli się przez 3, a następnie numer podzielona jest przez 3. Dla exmaple: 15 -> 1+5 = 6 -> 6 jest podzielone przez 3, więc 15 jest podzielone przez 3.

Ważne jest, aby zrozumieć, że nie szukam KODU, który to zrobi .. bool flag = (i% 3 == 0); nie jest odpowiedzią, której szukam. Szukam czegoś, co jest łatwe do zrobienia, tak jak prawo dziesiętne.

+0

To pytanie może lepiej pasuje do [math.SE] (http://math.stackexchange.com/). –

+1

[Rozwiązanie na CS.SE] (http://cs.stackexchange.com/questions/7879/algorithms-computing-if-a-number-is-a-multiple-of-3/7889#7889). Podobne rozwiązania działają dla dowolnego systemu liczbowego n-arion i dzielnika. –

Odpowiedz

13

Patrz tej stronie: How to Tell if a Binary Number is Divisible by Three

Zasadniczo policzyć liczbę niezerowych pozycji nieparzystych bitów i niezerowej pozycjach parzystych bije z prawej. Jeżeli ich różnica jest podzielna przez 3, a ta liczba jest podzielna przez 3

Na przykład:

15 = 1111 który ma nieparzystą 2 i 2, również bez bitów zerowych. Różnica wynosi 0. Tak więc 15 jest podzielna przez 3.

185 = 10111001 który ma 2 nieparzyste bity niezerowe i 3 równe bity niezerowe. Różnica wynosi 1. Tak więc 185 nie jest podzielna przez 3.

Wyjaśnienie

Rozważmy wartości 2^n. Wiemy, że 2^0 = 1 jest przystający 1 mod 3. Tak więc 2^1 = 2 jest konwentem 2*1 = 2 mod 3. Kontynuując wzorzec, zauważamy, że dla 2^n, gdzie n jest nieparzyste, 2^n jest przystające 1 mod 3 i nawet jeśli jest zgodne, 2 mod 3, które jest -1 mod 3. Tak więc 10111001 jest zgodny z 1*1 + 0*-1 + 1*1 + 1*-1 + 1*1 + 0*-1 + 0*1 + 1*-1 mod 3, który jest przystający do 1 mod 3. W związku z tym 185 nie jest podzielne przez 3.

+0

Wielkie dzięki, czy wiesz, jakie jest matematyczne wyjaśnienie tej sztuczki? –

+1

@ItayBraha: Nie jest to pełne wyjaśnienie: jest to ta sama sztuczka co w przypadku testowania, czy liczba dziesiętna jest podzielna przez 11. Słowo kluczowe to * zmienna suma cyfr *. Jeśli i tylko wtedy, gdy zmienna cyfra sumy dziesiętnej jest podzielna przez 11, to jest także pierwotna liczba. Można go użyć, gdy liczba, na której chcesz przetestować podzielność, wynosi * jeden więcej * niż podstawa systemu liczbowego. Aby przetestować podzielność numerów jeden pod radix (na przykład 9 dla systemu dziesiętnego), użyj zwykłej cyfrowej sumy. Tak więc można łatwo przetestować podzielność przez 17 w układzie heksadecymalnym. –

+0

Test podzielności na 11 w systemie dziesiętnym jest taki sam, jak w wersji 3 w systemie binarnym. Również 3 w binarnym to 11. Czy brakuje mi czegoś? –

Powiązane problemy