summaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/factor.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/coreutils/factor.c b/coreutils/factor.c
index 7adc238..5e23c6c 100644
--- a/coreutils/factor.c
+++ b/coreutils/factor.c
@@ -73,7 +73,7 @@ static NOINLINE void factorize(wide_t N)
MULTIPLE_OF_3 = 1 << 2,
MULTIPLE_OF_5 = 1 << 6,
MULTIPLE_OF_7 = 1 << 11,
- MULTIPLE_3_5_7 = MULTIPLE_OF_3 | MULTIPLE_OF_5 | MULTIPLE_OF_7,
+ MULTIPLE_DETECTED = MULTIPLE_OF_3 | MULTIPLE_OF_5 | MULTIPLE_OF_7,
};
unsigned sieve_word;
@@ -102,9 +102,13 @@ static NOINLINE void factorize(wide_t N)
// count5 = 6;
// count7 = 9;
sieve_word = 0
+ /* initial count for SHIFT_n is (n-1)/2*3: */
+ (MULTIPLE_OF_3 - 3 * SHIFT_3)
+ (MULTIPLE_OF_5 - 6 * SHIFT_5)
+ (MULTIPLE_OF_7 - 9 * SHIFT_7)
+ //+ (MULTIPLE_OF_11 - 15 * SHIFT_11)
+ //+ (MULTIPLE_OF_11 - 18 * SHIFT_13)
+ //+ (MULTIPLE_OF_11 - 24 * SHIFT_17)
;
factor = 3;
for (;;) {
@@ -133,7 +137,7 @@ static NOINLINE void factorize(wide_t N)
// if (count3 && count5 && count7)
// continue;
sieve_word += INCREMENT_EACH;
- if (!(sieve_word & MULTIPLE_3_5_7))
+ if (!(sieve_word & MULTIPLE_DETECTED))
continue;
/*
* "factor" is multiple of 3 33% of the time (count3 reached 0),