Apresentamos um pipeline determinístico cooperativo para identificação de primos que combina Relógios de Falta (Falta-Gate), a métrica FaltaGAP (Δ e fixpoint de janela) e o DSS (crivo segmentado determinístico por intervalo). O objetivo é dupla transparência: (i) geolocalização modular do número com saltos por “gomo” (Δ), e (ii) verificação formal na faixa via DSS. O auditor clássico por divisores ≤√n é usado na prática como evidência cruzada (espera-se FP=FN=0).
Ferramentas embutidas neste arquivo permitem rodar os testes localmente (até 20.000 números por execução), ver gráficos (senoide triangular, histograma de Δ, resíduos mod 30), exportar CSV e reproduzir offline com código mínimo em Python/JS.
Conjunto de resíduos Res(30) = {1,7,11,13,17,19,23,29}. Filtra ímpares não múltiplos de 3 e 5. Primos 2,3,5 são base. Se n ∉ Res(30) e n é ímpar, então n é composto.
Para um conjunto de relógios 𝒫 (ex.: ≤29/≤59/≤97, sem 5), defina:
Se 𝒫 contém todos os primos ≤ √(n+Δ−1), então toda 𝒢(n) (restrita a Res(30)) é composta apenas por primos (janela-prima). O fixpoint FaltaGAP consiste em ampliar 𝒫 até cobrir √B; Δ é monótono (não cresce) e o processo converge.
Marca compostos por menores divisores p com p² ≤ B. Resultado é determinístico e serve como verdade na faixa.
Checa, para cada n, divisores primos ≤ √n. Em nossos testes, coincide com DSS (FP=FN=0), sendo evidência cruzada para reprodutibilidade.
Ímpares fora de Res(30) são múltiplos de 3 ou 5 (exceto 3 e 5). Logo, Res(30) é um pré-gate correto para candidatos.
Se algum F_p(n)=0 então p|n; recíproco imediato pela definição.
Se 𝒫 contém todos os primos ≤ √(n+Δ−1), então nenhum m∈𝒢(n) tem divisor ≤ √(n+Δ−1). Restringindo a Res(30), todos os m>1 são primos. ■
# Base de primos até sqrt(B):
BASE(B):
lim ← ⌊√B⌋
sieve[0..lim] ← 1; sieve[0]=sieve[1]=0
para i=2..⌊√lim⌋:
se sieve[i]=1: para j=i*i..lim passo i: sieve[j]=0
retornar {p | sieve[p]=1}
# DSS em [A,B]:
DSS(A,B):
mark[0..(B-A)] ← 1
se A ≤ 1: zerar 0 e/ou 1
base ← BASE(B)
para p em base:
start ← max(p*p, ceil(A/p)*p)
para m=start..B passo p: mark[m-A] ← 0
retornar mark # 1=primo, 0=composto
# FaltaGAP (Δ e fixpoint):
Δ(n, P) = min_{p∈P} ((p − (n mod p)) mod p)
FIXPOINT(n, P_init):
P ← P_init
Δ ← Δ(n,P); B ← n+Δ−1
enquanto max(P) < ⌊√B⌋:
ampliar P e recomputar Δ; B ← n+Δ−1
retornar (Δ, B, P_final)
Síntese: Wheel+Relógios reduzem domínio; FaltaGAP dá saltos determinísticos; DSS fixa a “verdade” na faixa; Auditor √n valida concordância; certificador formaliza quando necessário.
| N | VER | Wheel | FG | res30 | FG remainders |
|---|
import math
def primes_up_to(n):
s=bytearray(b"\x01")*(n+1); s[0:2]=b"\x00\x00"
for i in range(2,int(n**0.5)+1):
if s[i]: s[i*i:n+1:i]=b"\\x00"*(((n-i*i)//i)+1)
return [i for i in range(2,n+1) if s[i]]
def dss(A,B):
L=B-A+1; mark=bytearray(b"\\x01")*L
if A==0: mark[0]=0
if A<=1 and 1<=B: mark[1-A]=0
base=primes_up_to(int(B**0.5)+1)
for p in base:
start=max(p*p, ((A+p-1)//p)*p)
for m in range(start,B+1,p):
mark[m-A]=0
return mark
def sqrt_prime(n, base):
if n<2: return 0
if n==2: return 1
if n%2==0: return 0
for p in base:
if p*p>n: break
if n%p==0: return 0
return 1
def auditor(A,B):
base = primes_up_to(int(B**0.5)+1)
return bytearray(sqrt_prime(n,base) for n in range(A,B+1))
function primesUpTo(n){const s=new Uint8Array(n+1);s.fill(1);s[0]=s[1]=0;for(let i=2;i*i<=n;i++)if(s[i])for(let j=i*i;j<=n;j+=i)s[j]=0;const out=[];for(let i=2;i<=n;i++)if(s[i])out.push(i);return out;}
function basePrimesForDSS(B){const lim=Math.floor(Math.sqrt(B))+1,sv=new Uint8Array(lim+1);sv.fill(1);sv[0]=sv[1]=0;for(let i=2;i*i<=lim;i++)if(sv[i])for(let j=i*i;j<=lim;j+=i)sv[j]=0;const base=[];for(let i=2;i<=lim;i++)if(sv[i])base.push(i);return base;}
function DSS(A,B){const len=B-A+1,mark=new Uint8Array(len);mark.fill(1);if(A===0){mark[0]=0;if(len>1)mark[1]=0}if(A===1){mark[0]=0}const base=basePrimesForDSS(B);for(const p of base){let st=Math.max(p*p,Math.ceil(A/p)*p);for(let m=st;m<=B;m+=p)mark[m-A]=0}if(A<=0&&0<=B)mark[0-A]=0;if(A<=1&&1<=B)mark[1-A]=0;return mark;}
function sqrtVerdict(n,base){if(n<2)return 0;if(n===2)return 1;if(n%2===0)return 0;for(const p of base){if(p*p>n)break;if(n%p===0)return 0}return 1}