64Fermer66
PolluxLe 11/10/2007 à 15:38
Thibaut (./60) :
Pollux : Puisque la boucle précédent le return donnera toujours un hach inférieur à 256, on peut faire return hash%256 non ?

surtout pas, la valeur modulo 257 et la valeur modulo 256 n'ont absolument rien à voir pour des nombres suffisamment grands hehe en fait les propriétés mathématiques sont très différentes : par exemple, modulo 256, hash("il fait beau et chau") = hash("il fait chau et beau"), parce qu'on échange des lettres qui sont à 8 lettres d'écart, et que 33^8 = 1 mod 256 ; de même hash("hip hop") = hash("hop hip"), parce que i et o sont à 4 lettres d'écart, que 33^4 = 128+1 mod 256 et que i et o ont même parité... (et donc que i*128 mod 256 = o*128 mod 256)
modulo 257, on a pas tous ces problèmes parce que 257 est premier et que le plus petit nombre tel que 33^n = 1 mod 257, c'est n = 256 : autant dire que tu ne trouveras pas de contre-exemple de ce style pour une chaîne de moins de 256 caractères happy

(ne fais pas trop attention à la boucle while, c'est pas elle qui fait le gros du boulot : elle ne sert que dans un cas sur 257 ^^ c'est juste pour que même dans ce cas rare, les valeurs de hash restent bien distribuées smile)