Man kann 'es' kompliziert erklären ODER effizienter, aber für nicht C'ler schlechter lesbar kodieren und man kann mit 32 bit Zahlen einen astronomisch großen Wertebereich annehmen, der in der Praxis wohl kaum gebraucht wird. 😉
1 Million 32-bit Zahlen benötigen gerade mal 4 MB. Sprach da jemand von erforderlichen mehreren GB Arbeitsspeicher ?
Lasse ich meine obige Routine mit 1000000 (anstelle von 1000) Elementen und ohne dem zeitintensiven 'printf' laufen, benötigt sie auf einem Raspberry Pi (!!):
real 0m0.476s
user 0m0.440s
sys 0m0.030s
... und auf einem halbwegs modernen PC:
real 0m0.020s
user 0m0.017s
sys 0m0.000s
und das bei 'int Z[1000000]', also wovon reden wir unter realistischer Annahme? 😉
EDIT: Anstelle dem 'printf' lass ich einfach eine Variable inkrementieren, damit der Compiler nicht auf die Idee kommt, den 'if' wegzuoptimieren.