Test auf Endziffer im 10er System



  • Wie testet man mit C/C++ bei einer positiven Ganzzahl (z.B. uint32_t) möglichst rasch auf die Ziffer 1 oder 7 (im Zehnersystem) am Ende, also als letzte Ziffer?



  • Ganzzahlig durch 10 teilen und den Rest betrachten.



  • Also

    endziffer = zahl % 10;

    glaube nicht, dass man das wesentlich beschleunigen kann.



  • Im Binärbereich ist mir zumindest nichts Brauchbares eingefallen. Danke für die Antworten.



  • Das man es im Binärbereich nicht ablesen kann, liegt daran, dass 10 = 2 * 5 ist und die 5 stört da schon gewaltig. Du müsstest die Binärzahl schon mit 5 multiplizieren, um was binär "abzulesen", dass macht aber glaube wenig Sinn.

    Ne Quatsch, so einfach ist es leider nicht mal, Die Endziffer im Okatal, Hexadezimalsystem ablesen geht einfach, aber im Dezimalsystem geht das wirklich nicht effizienter



  • Wenn es die Endziffern 1 und 6 bzw. 2 und 7 wären, könnte man durch 5 teilen.



  • Witzig finde ich ja das XY-Problem, das hier aufgetreten ist.

    Zahl auf 1/7-Endziffer checken -> Geht nur mit %10 oder %5
    Zahl der Form 2^n-1 auf 1/7-Endziffer checken -> Einfach, n muss ungerade sein
    Mersenne-Primzahl Pre-Check durchführen mit Test auf 1/7-Endziffer -> Unnötig, da der Exponent eine Primzahl sein muss und 2^p-1 immer auf 1 oder 7 endet



  • Mersenne-Primzahl Pre-Check durchführen mit Test auf 1/7-Endziffer -> Unnötig, da der Exponent eine Primzahl sein muss und 2^p-1 immer auf 1 oder 7 endet

    Ja, leuchtet mir inzwischen auch ein. Sag mir lieber, wie man den optimalen Divisions-Precheck findet.


Log in to reply