jak udelat _cislo_ MOD 7 ?

Zdenek Dvorak zdvorak
Středa Březen 17 11:51:45 CET 2004


napadlo me:

tmp2:=0;
repeat
 tmp1:=7;
  while ((tmp2+tmp1*7)<_cislo_) do tmp1:=tmp1*7;
 tmp2:=tmp2+tmp1;
until (tmp2+7)>tmp;
_modulo_:=_cislo_-tmp2;


a nasobeni 7 delam jako x+(x<<1)+(x<<2)

Je to rychle pro libovolne velka cisla.


Zatim to ale vypada, ze pro tento ucel bude vyhodnejsi algoritmus
VodochodyII.


chaos





> To neni vubec spatny napad, ale urychlil bych ty podminky. Bud by
> podminka nebyla splnena, tak by se to odecteni preskocilo, nebo by byla
> splnena a doslo by k odecteni, ALE nevznikaji cykly jako ve vyse
> uvedenem pripade, tj. dalsi skoky navic!
> CHTELO by to spocitat, co je rychlejsi.
>
> 2. Je vetsi nebo rovno 32774? Pokud ano, odecti 32774 (nemusim se nikam
> vracet, protoze vetsi uz to nikdy nebude 65535-32774=32761)
> 3. Je vetsi nebo rovno 16387? Pokud ano, odecti 16387 (totez,
> 32773-16387=16386)
> 4. Je vetsi nebo rovno 8197? Pokud ano odecti 8197 (opet
> 16386-8197=8189)
> 5. podm. 4102? ... (8196-4102=4094)
> 6. podm. 2051? ... (4101-2051=2050)
> 7. podm. 1029? ... (2050-1029=1021)
> 8. podm. 518? ... (1028-518=510)
> 9. podm. 259? ... (517-259=258)
> 10. podm. 133? ... (258-133=125)
> 11. podm. 70?  ... (132-70=62)
> 12. podm. 35? ... (69-35=34)
> 13. podm. 21? ... (34-21=13)
> 14. podm. 14? ... (20-14=7)
> 15. podm. 7? ... (13-7=6)
> ... tady uz bude vysledek
>
> Cau PAT
>








Další informace o konferenci Hw-list