|
PROG
|
(PARI) ok(b, n)=my(bk=1); for(k=1, n, bk*=b; if(!ispseudoprime(bk^2+bk-1), return(0))); b>0
(PARI) \\ Reasonably efficient code, using precomputed modulus tables to speed the searches.
diff(v)=vector(#v-1, i, v[i+1]-v[i])
ok(b, n)=my(bk=1); for(k=1, n, bk*=b; if(!ispseudoprime(bk^2+bk-1), return(0))); b>0
okMod(b, p, n)=for(k=1, n, my(m=Mod(b, p)^k); if(m^2+m==1, return(0))); 1
lst(p, n)=select(b->okMod(b, p, n), [0..p-1])
makeU(lim, n)=my(v=[0], m=1, t); forprime(p=5, lim, t=lst(p); if(#t<p, my(V=vector(#v*#t), idx); for(i=1, #v, my(vim=Mod(v[i], m)); for(j=1, #t, V[idx++]=lift(chinese(vim, Mod(t[j], p))))); v=V; m*=p)); v=Set(v); diff(concat(v, m+v[1]))
a(n)=forstep(b=0, 9e99, makeU(31, n), if(ok(b), return(b)))
|