web-dev-qa-db-fra.com

Comment savoir si un nombre binaire divise par 3?

Je veux savoir s'il existe une règle divisible dans le système binaire pour la division par 3.

Par exemple: en décimal, si la somme des chiffres est divisée par 3 alors le nombre est divisé par 3. Pour exmaple: 15 -> 1+5 = 6 -> 6 est divisé par 3, donc 15 est divisé par 3.

La chose importante à comprendre est que je ne cherche pas un CODE qui le fera. Bool flag = (i% 3 == 0); n'est pas la réponse que je cherche. Je cherche quelque chose qui soit facile à faire pour l'homme tout comme la loi décimale.

13
Itay Braha

Reportez-vous à ce site Web: Comment savoir si un nombre binaire est divisible par trois

Comptage de base du nombre de bits de positions impaires non nulles et de bits de positions paires non nulles à partir de la droite . Si leur différence est divisible par 3, alors le nombre est divisible par 3.

Par exemple:

15 = 1111 qui a 2 bits impairs et 2 pairs non nuls. La différence est 0. Ainsi 15 est divisible par 3.

185 = 10111001 qui a 2 bits non nuls impairs et 3 bits pairs non nuls. La différence est 1. Ainsi 185 n'est pas divisible par 3.

Explication

Prendre en compte 2^n valeurs. Nous savons que 2^0 = 1 est congruent 1 mod 3. Donc 2^1 = 2 est congurant 2*1 = 2 mod 3. Poursuivant le modèle, nous remarquons que pour 2^n où n est impair, 2^n est congruent 1 mod 3 et même il est congruent 2 mod 3 lequel est -1 mod 3. Donc 10111001 est congruent 1*1 + 0*-1 + 1*1 + 1*-1 + 1*1 + 0*-1 + 0*1 + 1*-1 mod 3 qui est congruent 1 mod 3. Ainsi 185 n'est pas divisible par 3.

29
Benson Lin