118 lines
4.3 KiB
Python
118 lines
4.3 KiB
Python
#!/usr/bin/env python3
|
|
"""DIMENSIONAL PRIME ANALYSIS — mode counting in 1D/2D/3D/4D.
|
|
Tests whether primes are dimension-dependent.
|
|
Key finding: 2 is structural in dimensions 2 and 3.
|
|
At dimension 4 = 2^2, Lagrange's theorem exhausts 2's power.
|
|
"""
|
|
import math
|
|
from collections import defaultdict
|
|
def is_prime(n):
|
|
if n<2:return False
|
|
if n<4:return True
|
|
if n%2==0 or n%3==0:return False
|
|
i=5
|
|
while i*i<=n:
|
|
if n%i==0 or n%(i+2)==0:return False
|
|
i+=6
|
|
return True
|
|
def sieve(n):
|
|
if n<2:return []
|
|
ip=[True]*(n+1);ip[0]=ip[1]=False
|
|
for i in range(2,int(n**0.5)+1):
|
|
if ip[i]:
|
|
for j in range(i*i,n+1,i):ip[j]=False
|
|
return [i for i in range(n+1) if ip[i]]
|
|
def modes_1d(me):
|
|
c=defaultdict(int);mk=int(me**0.5)+1
|
|
for k in range(-mk,mk+1):
|
|
e=k*k
|
|
if 0<e<=me:c[e]+=1
|
|
return dict(sorted(c.items()))
|
|
def modes_2d(me):
|
|
c=defaultdict(int);mk=int(me**0.5)+1
|
|
for kx in range(-mk,mk+1):
|
|
for ky in range(-mk,mk+1):
|
|
e=kx*kx+ky*ky
|
|
if 0<e<=me:c[e]+=1
|
|
return dict(sorted(c.items()))
|
|
def modes_3d(me):
|
|
c=defaultdict(int);mk=int(me**0.5)+1
|
|
for kx in range(-mk,mk+1):
|
|
for ky in range(-mk,mk+1):
|
|
for kz in range(-mk,mk+1):
|
|
e=kx*kx+ky*ky+kz*kz
|
|
if 0<e<=me:c[e]+=1
|
|
return dict(sorted(c.items()))
|
|
def modes_4d(me):
|
|
c=defaultdict(int);mk=int(me**0.5)+1
|
|
for k1 in range(-mk,mk+1):
|
|
for k2 in range(-mk,mk+1):
|
|
for k3 in range(-mk,mk+1):
|
|
r2=k1*k1+k2*k2+k3*k3
|
|
if r2>me:continue
|
|
for k4 in range(-mk,mk+1):
|
|
e=r2+k4*k4
|
|
if 0<e<=me:c[e]+=1
|
|
return dict(sorted(c.items()))
|
|
def main():
|
|
ME=50
|
|
print('='*70+'\n DIMENSIONAL PRIME ANALYSIS\n'+'='*70)
|
|
print('\n Computing modes...')
|
|
m1=modes_1d(ME);m2=modes_2d(ME);m3=modes_3d(ME)
|
|
print(' Computing 4D...')
|
|
m4=modes_4d(ME)
|
|
r1=set(m1.keys());r2=set(m2.keys());r3=set(m3.keys());r4=set(m4.keys())
|
|
nr3=set(range(1,ME+1))-r3;nr4=set(range(1,ME+1))-r4
|
|
print(f'\n--- REPRESENTABLE ENERGIES ---')
|
|
print(f'1D: {len(r1)}/{ME} (perfect squares only)')
|
|
print(f'2D: {len(r2)}/{ME}')
|
|
print(f'3D: {len(r3)}/{ME}, NOT rep: {sorted(nr3)}')
|
|
print(f'4D: {len(r4)}/{ME} (ALL — Lagrange theorem)')
|
|
print(f'\n--- 3D EXCLUSIONS (4^a * (8b+7)) ---')
|
|
for n in sorted(nr3):
|
|
m=n;a=0
|
|
while m%4==0:m//=4;a+=1
|
|
print(f' {n:>4} = 4^{a} x {m} (mod8={m%8}) prime={is_prime(n)}')
|
|
print(f'\n--- MODE TABLE ---')
|
|
print(f'{"E":>4} {"1D":>4} {"2D":>5} {"3D":>6} {"4D":>7} {"2Dcum":>6} {"3Dcum":>6}')
|
|
c2=0;c3=0;nm={2,8,20,28,50,82,126};hm={2,8,20,40,70,112}
|
|
for e in range(1,ME+1):
|
|
d1=m1.get(e,0);d2=m2.get(e,0);d3=m3.get(e,0);d4=m4.get(e,0)
|
|
c2+=d2;c3+=d3
|
|
mk=[]
|
|
if c2 in nm:mk.append(f'2D->N:{c2}')
|
|
if c3 in nm:mk.append(f'3D->N:{c3}')
|
|
if c2 in hm:mk.append(f'2D->HO:{c2}')
|
|
if d2>0 or d3>0 or mk:
|
|
print(f' {e:>4} {d1:>4} {d2:>5} {d3:>6} {d4:>7} {c2:>6} {c3:>6} {" ".join(mk)}')
|
|
print(f'\n--- MAGIC NUMBER SPEED ---')
|
|
for mg in [2,8,20,28,40,50,70,82,112,126]:
|
|
c2=0;e2=None
|
|
for e in sorted(m2.keys()):
|
|
c2+=m2[e]
|
|
if c2>=mg and not e2:e2=e
|
|
c3=0;e3=None
|
|
for e in sorted(m3.keys()):
|
|
c3+=m3[e]
|
|
if c3>=mg and not e3:e3=e
|
|
print(f' Magic {mg:>3}: 2D@E={e2}, 3D@E={e3} {"(3D faster)" if e3 and e2 and e3<e2 else ""}')
|
|
print(f'\n--- COPRIME SIEVE IN 3D ---')
|
|
p100=set(sieve(100))
|
|
for wls in [(128,8),(128,8,6),(128,9,5),(127,9,5)]:
|
|
sv=[n for n in range(2,101) if all(math.gcd(n,w)==1 for w in wls)]
|
|
cap=p100&set(sv);miss=p100-set(sv)
|
|
sp=set();
|
|
for w in wls:
|
|
n=w;d=2
|
|
while d*d<=n:
|
|
while n%d==0:sp.add(d);n//=d
|
|
d+=1
|
|
if n>1:sp.add(n)
|
|
print(f' WL{wls}: structural={sorted(sp)} prec={100*len(cap)/max(1,len(sv)):.1f}% miss={sorted(miss)}')
|
|
print(f'\n--- SUMMARY ---')
|
|
print(f'2 is structural in 2D (mod 4) and 3D (4^a(8b+7)).')
|
|
print(f'At dim 4 = 2^2, Lagrange exhausts 2. Self-referential.')
|
|
print(f'Odd primes (3,5,7,11...) are universal across all dimensions.')
|
|
print(f'In dim D, the first D-1 primes can be made structural.')
|
|
if __name__=='__main__':main()
|