Returns the number of composite integers below max_number have precisely two, not necessarily distinct, prime factors. >>> solution(30) 10
(max_number: int = 10**8)
| 115 | |
| 116 | |
| 117 | def solution(max_number: int = 10**8) -> int: |
| 118 | """ |
| 119 | Returns the number of composite integers below max_number have precisely two, |
| 120 | not necessarily distinct, prime factors. |
| 121 | |
| 122 | >>> solution(30) |
| 123 | 10 |
| 124 | """ |
| 125 | |
| 126 | prime_numbers = calculate_prime_numbers(max_number // 2) |
| 127 | |
| 128 | semiprimes_count = 0 |
| 129 | right = len(prime_numbers) - 1 |
| 130 | for left in range(len(prime_numbers)): |
| 131 | if left > right: |
| 132 | break |
| 133 | for r in range(right, left - 2, -1): |
| 134 | if prime_numbers[left] * prime_numbers[r] < max_number: |
| 135 | break |
| 136 | right = r |
| 137 | semiprimes_count += right - left + 1 |
| 138 | |
| 139 | return semiprimes_count |
| 140 | |
| 141 | |
| 142 | def benchmark() -> None: |
no test coverage detected