Av: Didrik Pemmer Aalen
Et Harshadtall er definert som et positivt tall som er delelig med summen av alle sifferne i tallet. I noen tilfeller er summen av alle sifferne i tallet et primtall. Disse kaller vi Harshadprimtall.
1729 er et Harshadtall fordi 1 + 7 + 2 + 9 = 19 og 1729 % 19 = 0. Dette er også et Harshadprimtall, fordi 19 er et primtall.
1730 er ikke et Harshadtall fordi 1 + 7 + 3 + 0 = 11 og 1730 % 11 = 3.
Hvor mange tall fra 1 til og med 98765432 er Harshadprimtall?
@terjew
Yes, jeg kom til samme konklusjon. En 64 bits left-shit var en "dead giveaway".
Dette kommer godt fram i fastmod.h:
Min Raspberry har en armv7 (rev 4, altså v7l) og den er ikke 64-bits, og den mangler UMULH. Det kan jo fikses i software (shift og ta vare på carry), men det blir en omfattende operasjon og da spørs det om vinningen går opp i spinningen.
En liten test-funksjon:
Blir til:
(gcc)
(clang)
Som vi ser så har ikke ARM v71 støtte for mod (eller div) for 64-bits heltall, noe som ikke bør komme som et sjokk når vi er på en 32-bits platform. Ser ikke ut som ARM støtter divisjon av mindre heltall heller (når jeg tester tilsvarende med clang), men det kan være fordi ARM før Cortext faktisk manglet divisjon i hardware, og at min clang er så gammel at den tror det fremdeles er tilfellet (eller mener den er smartere enn ARM Cortex). Det er egentlig ganske forvirrende om ARM har hardware-divisjon eller ikke. Division on ARM Cores
__umoddi3.c
Kildekoden til
__udivmoddi4
Yes, men den glimrer med sitt fravær dessverre. Lurer på om dette faktisk krever 64-bits platform. Det nok en god grunn for at ARMv7 ikke støtter 128-bits integer. Spørs om det faktisk blir for få registre (ARM har registre i bøtter og spann) når et register i ARMv7 er 32 bits.