Branch Coverage

almost_primes.c
Criterion Covered Total %
branch 345 618 55.8


line true false branch
38 3 0 if (k <= 1 || k >= BITS_PER_WORD) return 0;
0 3 if (k <= 1 || k >= BITS_PER_WORD) return 0;
39 0 3 if (k > MPU_MAX_POW3) /* Larger n would not fit in a UV type */
41 3 0 while ((k-r) > 1 && (n>>r) < _pow3[k-r])
0 3 while ((k-r) > 1 && (n>>r) < _pow3[k-r])
49 0 555 if (k > MPU_MAX_POW3) /* Larger n would not fit in a UV type */
51 1903 0 while (k >= r && ((*n)>>r) < _pow3[k-r])
1348 555 while (k >= r && ((*n)>>r) < _pow3[k-r])
54 84 471 if (r > 0) {
63 24 0 if (k <= 1 || k >= BITS_PER_WORD) return 0;
0 24 if (k <= 1 || k >= BITS_PER_WORD) return 0;
64 0 24 if (k > A078843_MAX_K) {
65 0 0 if (n >= _first_3[A078843_MAX_K])
69 91 24 while (n < _first_3[k-r])
79 2 0 MPUassert(n < 8 && k >= 2, "Fast small nth almost prime out of range");
0 2 MPUassert(n < 8 && k >= 2, "Fast small nth almost prime out of range");
80 0 2 if (k == 2) return semi[n];
114 4 0 SIMPLE_FOR_EACH_PRIME(2, cbrtn) {
35 4 SIMPLE_FOR_EACH_PRIME(2, cbrtn) {
35 0 SIMPLE_FOR_EACH_PRIME(2, cbrtn) {
117 4 31 if ((lo <= 2) && (hi >= 2)) sum += CACHED_PC(cache,n/(pdiv*2)) - j++;
4 0 if ((lo <= 2) && (hi >= 2)) sum += CACHED_PC(cache,n/(pdiv*2)) - j++;
118 8 27 if ((lo <= 3) && (hi >= 3)) sum += CACHED_PC(cache,n/(pdiv*3)) - j++;
8 0 if ((lo <= 3) && (hi >= 3)) sum += CACHED_PC(cache,n/(pdiv*3)) - j++;
119 11 24 if ((lo <= 5) && (hi >= 5)) sum += CACHED_PC(cache,n/(pdiv*5)) - j++;
9 2 if ((lo <= 5) && (hi >= 5)) sum += CACHED_PC(cache,n/(pdiv*5)) - j++;
120 11 24 if (lo < 7) lo = 7;
121 32 3 if (lo <= hi) {
125 32 32 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
126 999 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
32 967 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
903 64 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
999 9 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
41 32 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
147 3081 0 if (hi-lo < 500) {
148 3081 0 SIMPLE_FOR_EACH_PRIME(lo, hi) {
20310 3081 SIMPLE_FOR_EACH_PRIME(lo, hi) {
20310 0 SIMPLE_FOR_EACH_PRIME(lo, hi) {
154 0 0 if ((lo <= 2) && (hi >= 2)) s += CACHED_PC(cache,n/(pdiv*2)) - j++;
0 0 if ((lo <= 2) && (hi >= 2)) s += CACHED_PC(cache,n/(pdiv*2)) - j++;
155 0 0 if ((lo <= 3) && (hi >= 3)) s += CACHED_PC(cache,n/(pdiv*3)) - j++;
0 0 if ((lo <= 3) && (hi >= 3)) s += CACHED_PC(cache,n/(pdiv*3)) - j++;
156 0 0 if ((lo <= 5) && (hi >= 5)) s += CACHED_PC(cache,n/(pdiv*5)) - j++;
0 0 if ((lo <= 5) && (hi >= 5)) s += CACHED_PC(cache,n/(pdiv*5)) - j++;
157 0 0 if (lo < 7) lo = 7;
158 0 0 if (lo <= hi) {
162 0 0 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
163 0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
175 0 2286 if (k == 2)
178 2286 0 SIMPLE_FOR_EACH_PRIME(lo, rootint(n/pdiv,k)) {
5337 2286 SIMPLE_FOR_EACH_PRIME(lo, rootint(n/pdiv,k)) {
5337 0 SIMPLE_FOR_EACH_PRIME(lo, rootint(n/pdiv,k)) {
179 3081 2256 if (k == 3) count += _final_sum(n, pdiv*p, p, cache);
191 1 46 if (k == 0) return (n >= 1);
192 46 0 if (k >= BITS_PER_WORD || (n >> k) == 0) return 0;
4 42 if (k >= BITS_PER_WORD || (n >> k) == 0) return 0;
195 1 41 if (n >= max_nth_almost_prime(k))
198 0 41 if (k == 0) return n;
199 4 37 if (k == 1) return prime_count(n);
200 3 34 if (k == 2) return semiprime_count(n);
201 4 30 if (k == 3) return almost3prime_count(n);
202 0 30 if (n < 3*(UVCONST(1) << (k-1))) return 1;
203 0 30 if (n < 9*(UVCONST(1) << (k-2))) return 2;
204 0 30 if (n < 10*(UVCONST(1) << (k-2))) return 3;
212 2 28 if (csize < 32) csize = 32;
213 12 18 if (csize > 16UL*1024) csize = n / (1UL << (k+2)); /* 15 */
214 0 30 if (csize > 128UL*1024) csize = n / (1UL << (k+4)); /* 84 */
215 0 30 if (csize > 1UL*1024*1024) csize = n / (1UL << (k+6)); /* 421 */
216 0 30 if (((csize >> 16) >> 16) >= 3) csize >>= 1;
225 0 0 if (k == 0) return (lo <= 1 && hi >= 1);
0 0 if (k == 0) return (lo <= 1 && hi >= 1);
0 0 if (k == 0) return (lo <= 1 && hi >= 1);
226 0 0 if (k == 1) return prime_count_range(lo, hi);
227 0 0 if (k == 2) return semiprime_count_range(lo, hi);
229 0 0 if (k >= BITS_PER_WORD || (hi >> k) == 0 || hi < lo) return 0;
0 0 if (k >= BITS_PER_WORD || (hi >> k) == 0 || hi < lo) return 0;
0 0 if (k >= BITS_PER_WORD || (hi >> k) == 0 || hi < lo) return 0;
231 0 0 - (((lo >> k) == 0) ? 0 : almost_prime_count(k,lo-1));
237 0 159 if (k == 0) return (n >= 1);
238 159 0 if (k >= BITS_PER_WORD || (n >> k) == 0) return 0;
9 150 if (k >= BITS_PER_WORD || (n >> k) == 0) return 0;
241 1 149 if (k == 1) return prime_count_approx(n);
242 1 148 if (k == 2) return semiprime_count_approx(n);
243 0 148 if (n < 3*(UVCONST(1) << (k-1))) return 1;
244 0 148 if (n < 9*(UVCONST(1) << (k-2))) return 2;
245 0 148 if (n < 10*(UVCONST(1) << (k-2))) return 3;
247 40 108 if (k == 3 && n < 102) {
3 37 if (k == 3 && n < 102) {
249 12 0 for (lo=0; lo < 19; lo++)
250 3 9 if (n < sm3[lo])
257 37 108 if (k == 3) { /* Much better fit for k=3. */
261 12 25 if (x <= 638) { s = 1.554688; a = 0.865814; }
262 2 23 else if (x <= 1544) { s = 1.050000; a = 0.822256; }
263 8 15 else if (x <= 1927) { s = 0.625000; a = 0.791747; }
264 11 4 else if (x <= 486586) { s = 2.865611; a = 1.004090; }
265 0 4 else if (x <= 1913680) { s = 2.790963; a = 0.999618; }
266 0 4 else if (x <= 22347532) { s = 2.719238; a = 0.995635; }
267 2 2 else if (x <= 2.95e8) { s = 2.584473; a = 0.988802; }
268 0 2 else if (x <= 4.20e9) { s = 2.457108; a = 0.983098; }
269 0 2 else if (x <= 7.07e10) { s = 2.352818; a = 0.978931; }
270 0 2 else if (x <= 1.36e12) { s = 2.269745; a = 0.975953; }
271 2 0 else if (x <= 4.1e13) { s = 2.203002; a = 0.973796; }
272 0 0 else if (x <= 9.2e14) { s = 2.148463; a = 0.972213; }
275 0 37 if (est < lo) est = lo;
276 0 37 else if (est > hi) est = hi;
304 41 67 if (k > 11) return lo + (hi-lo) * 0.20;
336 0 5 if (n == 0) return 0;
337 0 5 if (k == 0) return (n == 1) ? 1 : 0;
338 0 5 if (k == 1) return nth_prime_upper(n);
339 0 5 if (n < 8) return _fast_small_nth_almost_prime(k, n);
343 0 5 if (n >= maxc) return n == maxc ? maxn : 0;
0 0 if (n >= maxc) return n == maxc ? maxn : 0;
346 1 4 if (r > 0) {
348 1 0 if (redup > maxn || ((redup<>r) != redup)
0 1 if (redup > maxn || ((redup<>r) != redup)
363 0 14 if (n == 0) return 0;
364 0 14 if (k == 0) return (n == 1) ? 1 : 0;
365 0 14 if (k == 1) return nth_prime_lower(n);
366 0 14 if (n < 8) return _fast_small_nth_almost_prime(k, n);
369 0 14 if (n >= maxc) return n == maxc ? max_nth_almost_prime(k) : 0;
0 0 if (n >= maxc) return n == maxc ? max_nth_almost_prime(k) : 0;
372 2 12 if (r > 0) return nth_almost_prime_lower(k-r, n) << r;
384 0 10 if (n == 0) return 0;
385 0 10 if (k == 0) return (n == 1) ? 1 : 0;
386 1 9 if (k == 1) return nth_prime_approx(n);
387 1 8 if (k == 2) return nth_semiprime_approx(n);
390 0 8 if (n >= maxc) return n == maxc ? max_nth_almost_prime(k) : 0;
0 0 if (n >= maxc) return n == maxc ? max_nth_almost_prime(k) : 0;
394 0 8 if (n < 8) return _fast_small_nth_almost_prime(k,n);
411 0 10 if (n == 0) return 0;
412 0 10 if (k == 0) return (n == 1) ? 1 : 0;
413 1 9 if (k == 1) return nth_prime(n);
414 2 7 if (k == 2) return nth_semiprime(n);
417 0 7 if (n >= maxc) return n == maxc ? max_nth_almost_prime(k) : 0;
0 0 if (n >= maxc) return n == maxc ? max_nth_almost_prime(k) : 0;
420 2 5 if (n < 8) return _fast_small_nth_almost_prime(k,n);
422 1 4 if (r > 0) return nth_almost_prime(k-r,n) << r;
428 1 3 if (k == 3)
430 1 2 if (k == 4)
436 6232 2 while (!is_almost_prime(k,hi))
549 363 0 if (k >= BITS_PER_WORD || (n >> k) == 0) { *lower = *upper = 0; return; }
0 363 if (k >= BITS_PER_WORD || (n >> k) == 0) { *lower = *upper = 0; return; }
551 0 363 if (k == 0) { *lower = *upper = (n >= 1); return; }
552 0 363 if (k == 1) { *lower = prime_count_lower(n); *upper = prime_count_upper(n); return; }
553 0 363 if (n < 3*(UVCONST(1) << (k-1))) { *lower = *upper = 1; return; }
554 0 363 if (n < 9*(UVCONST(1) << (k-2))) { *lower = *upper = 2; return; }
555 0 363 if (n < 10*(UVCONST(1) << (k-2))) { *lower = *upper = 3; return; }
558 0 363 if (n >= max_nth_almost_prime(k))
568 234 129 if (n <= 1048575U) {
569 0 234 MPUassert(k <= 12, "almost prime count: 20-bit n doesn't exceed k 12");
571 123 6 } else if (n <= 4294967295U) {
572 0 123 MPUassert(k <= 20, "almost prime count: 32-bit n doesn't exceed k 20");
575 0 6 MPUassert(k <= 40, "almost prime count: after reduction, k <= 40");
579 12 351 if (k == 2) {
581 0 12 if (x >= 1e12) {
585 107 244 } else if (k == 3) {
589 37 70 if (n < 638) {
591 19 51 } else if (n <= 1926) {
594 47 4 } else if (n <= 500194) {
597 2 2 } else if (n <= 3184393786U) {
607 2 105 if (n > 4294967295U) multu = 0.8711;
608 89 155 } else if (k == 4) {
613 2 87 if (x > 1e12) {
618 2 87 if (n > 4294967295U) multu = 0.780;
619 2 87 if (x > 1e12) multu = 0.6921;
628 1979 155 for (i = 1; i < k; i++)
641 363 0 *lower = (boundl >= UV_MAX || (max > 0 && boundl > max)) ? max : (UV)boundl;
363 0 *lower = (boundl >= UV_MAX || (max > 0 && boundl > max)) ? max : (UV)boundl;
363 0 *lower = (boundl >= UV_MAX || (max > 0 && boundl > max)) ? max : (UV)boundl;
642 363 0 *upper = (boundu >= UV_MAX || (max > 0 && boundu > max)) ? max : (UV)(boundu+1.0);
363 0 *upper = (boundu >= UV_MAX || (max > 0 && boundu > max)) ? max : (UV)(boundu+1.0);
363 0 *upper = (boundu >= UV_MAX || (max > 0 && boundu > max)) ? max : (UV)(boundu+1.0);
647 0 163 if (k == 2 && n < 256) return semiprime_count(n);
0 0 if (k == 2 && n < 256) return semiprime_count(n);
654 0 55 if (k == 2 && n < 256) return semiprime_count(n);
0 0 if (k == 2 && n < 256) return semiprime_count(n);
681 0 448 if (k >= BITS_PER_WORD) return 0;
700 0 420 if (k >= BITS_PER_WORD) return 0;
730 0 0 if (*count > 1) {
733 0 0 for (j = 0, i = 1; i < *count; i++) {
734 0 0 if (L[i] != L[j])
739 0 0 if (minimal) {
741 0 0 Renew(*list, *Lsize, UV);
742 0 0 } else if (*count * 1.5 > *Lsize) {
744 0 0 Renew(*list, *Lsize, UV);
751 0 0 if (k == 0 || k >= BITS_PER_WORD) { *list = 0; return 0; }
0 0 if (k == 0 || k >= BITS_PER_WORD) { *list = 0; return 0; }
752 0 0 if ((lo >> k) == 0) lo = UVCONST(1) << k;
753 0 0 if (hi > max_nth_almost_prime(k)) hi = max_nth_almost_prime(k);
754 0 0 if (lo > hi) { *list = 0; return 0; }
756 0 0 if (k == 1) return range_prime_sieve(list, lo, hi);
757 0 0 if (k == 2) return range_semiprime_sieve(list, lo, hi);
769 0 0 New(0, L, Lsize, UV);
771 0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
0 0 START_DO_FOR_EACH_PRIME(2, lastprime) {
772 0 0 for (i = 0; i < nkap1; i++) {
774 0 0 if (prod < lo) continue;
775 0 0 if (prod > hi) break;
776 0 0 if (count >= Lsize)
793 3 0 if (k == 0 || k >= BITS_PER_WORD) { *list = 0; return 0; }
0 3 if (k == 0 || k >= BITS_PER_WORD) { *list = 0; return 0; }
794 0 3 if ((slo >> k) == 0) slo = UVCONST(1) << k;
795 0 3 if (shi > max_nth_almost_prime(k)) shi = max_nth_almost_prime(k);
796 0 3 if (slo > shi) { *list = 0; return 0; }
799 0 3 if (shi-slo+1 < thresh_pred) {
801 0 0 New(0, S, Ssize, UV);
802 0 0 for (i = 0, j = 0; i < shi-slo+1; i++)
803 0 0 if (is_almost_prime(k, slo+i))
810 0 3 if (k == 1) return range_prime_sieve(list, slo, shi);
811 0 3 if (k == 2) return range_semiprime_sieve(list, slo, shi);
820 0 3 if (r > 0) {
824 0 0 for (i = 0; i < count; i++)
832 0 3 if (Ssize > 10000000UL) Ssize = 10000000UL;
833 0 3 New(0, S, Ssize, UV);
857 3 0 UV kdiv = (k < 3) ? UVCONST(1) : (UVCONST(1) << (k-2));
860 0 3 New(0, N, segsize+1, UV);
864 3 3 for (lo = slo; lo <= shi && lo >= slo; lo = hi+1) {
3 0 for (lo = slo; lo <= shi && lo >= slo; lo = hi+1) {
866 0 3 if (hi > shi || hi < lo) hi = shi;
0 0 if (hi > shi || hi < lo) hi = shi;
869 153 3 for (i = lo; i <= hi; i++) {
870 78 75 if (!(i&1) && i >= 2) {
78 0 if (!(i&1) && i >= 2) {
871 78 0 const unsigned char nz = (unsigned char)ctz(i);
877 3 0 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
3 0 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
6 372018 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
6 0 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
3 3 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
154755 217263 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
2 164506 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
9753 154753 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
2 154753 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
0 372016 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
1 372021 START_DO_FOR_EACH_PRIME(3, isqrt(hi/kdiv)) {
879 0 372021 for (i = P_GT_LO_0(p,p,lo); i < range; i += p)
368 372021 for (i = P_GT_LO_0(p,p,lo); i < range; i += p)
881 380658 372021 for (pk = p*p; pk <= hi; pk *= p) {
882 0 380658 for (i = P_GT_LO_0(pk,pk,lo); i < range; i += pk)
78 380658 for (i = P_GT_LO_0(pk,pk,lo); i < range; i += pk)
884 0 380658 if (pk >= maxpk) break; /* Overflow protection */
887 153 3 for (i = 0; i < range; i++) {
888 115 38 if (N[i] < (lo+i))
890 34 119 if (nf[i] == k) {
891 0 34 if (count >= Ssize)
892 0 0 Renew(S, Ssize += 10000, UV);
906 398 346 if (k == 1) {
911 300 98 if (start > begp) begp = start;
913 393 5 if (endp < 10000000U) {
914 393 0 START_DO_FOR_EACH_PRIME(begp, endp) {
66 327 START_DO_FOR_EACH_PRIME(begp, endp) {
113 922 START_DO_FOR_EACH_PRIME(begp, endp) {
104 9 START_DO_FOR_EACH_PRIME(begp, endp) {
38 66 START_DO_FOR_EACH_PRIME(begp, endp) {
125 797 START_DO_FOR_EACH_PRIME(begp, endp) {
81 44 START_DO_FOR_EACH_PRIME(begp, endp) {
0 44 START_DO_FOR_EACH_PRIME(begp, endp) {
81 44 START_DO_FOR_EACH_PRIME(begp, endp) {
0 841 START_DO_FOR_EACH_PRIME(begp, endp) {
312 642 START_DO_FOR_EACH_PRIME(begp, endp) {
915 642 0 if (L != 0) {
916 0 642 if (pos >= size) Renew(L, size += 100000, UV);
0 0 if (pos >= size) Renew(L, size += 100000, UV);
924 0 5 if (L == 0) {
927 0 5 if ((pos + count - 1) >= size) Renew(L, size += (count + 100000), UV);
0 0 if ((pos + count - 1) >= size) Renew(L, size += (count + 100000), UV);
928 3 5 for (i = 0; i < count; i++)
940 31151 346 for (s = rootint(hi/m, k), p = begp; p <= s; p = next_prime(p)) {
942 732 30419 if ((lo/t + (lo % t != 0)) <= (hi/t))
952 0 24 if (k >= BITS_PER_WORD) { *list = 0; return 0; }
953 5 19 if ((lo >> k) == 0) lo = UVCONST(1) << k;
954 1 23 if (hi > max_nth_almost_prime(k)) hi = max_nth_almost_prime(k);
955 1 23 if (lo > hi) { *list = 0; return 0; }
958 3 20 if (k == 0) { New(0,L,1,UV); L[0]=1; *list=L; return 1; }
959 3 17 if (k == 1) return range_prime_sieve(list, lo, hi);
960 2 15 if (k == 2) return range_semiprime_sieve(list, lo, hi);
963 15 0 if ( (k >= 3 && hi >= 1e12 && (hi-lo) <= 5e6) ||
3 12 if ( (k >= 3 && hi >= 1e12 && (hi-lo) <= 5e6) ||
0 3 if ( (k >= 3 && hi >= 1e12 && (hi-lo) <= 5e6) ||
12 0 if ( (k >= 3 && hi >= 1e12 && (hi-lo) <= 5e6) ||
964 0 12 (k >= 3 && hi >= 1e13 && (hi-lo) <= 2e8) ||
0 0 (k >= 3 && hi >= 1e13 && (hi-lo) <= 2e8) ||
12 0 (k >= 3 && hi >= 1e13 && (hi-lo) <= 2e8) ||
965 0 12 (k >= 3 && hi >= 1e14 && (hi-lo) <= 4e8) )
0 0 (k >= 3 && hi >= 1e14 && (hi-lo) <= 4e8) )
972 12 0 Lsize = (countest > 10000000U) ? 10000000U : countest+1000;
974 0 12 New(0, L, Lsize, UV);
995 200 2 if (n < 2 || n > MAX_CHEN_PRIME) return 0;
0 200 if (n < 2 || n > MAX_CHEN_PRIME) return 0;
996 47 153 return (is_prime(n) && (is_prime(n+2) || is_semiprime(n+2)));
32 15 return (is_prime(n) && (is_prime(n+2) || is_semiprime(n+2)));
22 10 return (is_prime(n) && (is_prime(n+2) || is_semiprime(n+2)));
1000 48 0 for ( n = next_prime(n); n != 0 && n < MAX_CHEN_PRIME; n = next_prime(n+2) )
48 0 for ( n = next_prime(n); n != 0 && n < MAX_CHEN_PRIME; n = next_prime(n+2) )
1001 33 15 if (is_prime(n+2) || is_semiprime(n+2))
21 12 if (is_prime(n+2) || is_semiprime(n+2))