factor: expand comments
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 9 Apr 2017 21:12:38 +0000 (23:12 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 9 Apr 2017 21:12:38 +0000 (23:12 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/factor.c

index e0119015001614080fde2374a29b4d92b0a4953d..1c01e3f27d7a0f20516090ca937ecc0348337fae 100644 (file)
@@ -107,9 +107,12 @@ static NOINLINE void factorize(wide_t N)
        factor = 3;
        factor2 = 3 * 3;
        for (;;) {
-               while ((N % factor) == 0) {
+               /* The division is the most costly part of the loop.
+                * On 64bit CPUs, takes at best 12 cycles, often ~20.
+                */
+               while ((N % factor) == 0) { /* not likely */
                        N = N / factor;
-                       printf(" %u"HALF_FMT"", factor);
+                       printf(" %u"HALF_FMT, factor);
                        max_factor = isqrt_odd(N);
                }
  next_factor:
@@ -122,8 +125,8 @@ static NOINLINE void factorize(wide_t N)
                factor += 2;
                /* Rudimentary wheel sieving: skip multiples of 3:
                 * Every third odd number is divisible by three and thus isn't a prime:
-                * 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37...
-                * ^ ^   ^  ^     ^  ^     ^  _     ^  ^     _  ^
+                * 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47...
+                * ^ ^   ^  ^     ^  ^     ^  _     ^  ^     _  ^     ^  ^     ^
                 * (^ = primes, _ = would-be-primes-if-not-divisible-by-5)
                 */
                --count3;