Euler published the remarkable quadratic formula:
n² + n + 41
It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 41² + 41 + 41 is clearly divisible by 41.
Using computers, the incredible formula n² 79n + 1601 was discovered, which produces 80 primes for the consecutive values n = 0 to 79. The product of the coefficients, 79 and 1601, is 126479.
Considering quadratics of the form:
n² + an + b, where |a| 1000 and |b| 1000
where |n| is the modulus/absolute value of n
e.g. |11| = 11 and |4| = 4
Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0.
%run_procs %echo %prime_list p27()-> PL=prime_list(), PL ! {all_below,1000,self()}, put(primes,receive {primes_below,1000,V}->V end), {_,Ans}=run_procs(1999,fun(I)->[euler,p27,[run,I-1000,get(primes),{0,0},self()]] end, fun({L1,V1},{done,{L2,V2}}) when L2 > L1->{L2,V2}; (LV,_)->LV end,{0,0}), io:format("~w~n",[Ans]). p27(run,_,[],LV,Parent)->Parent ! {done,LV}; p27(run,A,[B|Others],{Largest,Value},Parent)-> Res=p27(check,A,B,1,prime_list()), if Res > Largest->p27(run,A,Others,{Res,A*B},Parent); true->p27(run,A,Others,{Largest,Value},Parent) end; p27(check,A,B,I,PL)-> Test=I*I+I*A+B, if Test < 2->I-1; true-> PL ! {is_prime,Test,self()}, case receive {is_prime,Test,Res}->Res end of true-> p27(check,A,B,I+1,PL); false-> I-1 end end.
#cartesian_product #PrimeList #Enumerable def p27 candidates=cartesian_product((-999..999),(2..999).select{|i|PrimeList.isPrime? i}){|a,b|PrimeList.isPrime?(a+b+1)} n=1 while candidates.length>1 n+=1 candidates.reject!{|p|not PrimeList.isPrime?(n**2+n*p[0]+p[1])} end puts candidates.first.product end