Friday, August 21, 2009

Euler Project 27

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.


My Solution Actually, we can improve the effect, because the b should be prime, but I just loop if from 1 to 999.
(defun  primep (n)
(cond ((minusp n) 'nil)
     ((= 2 n) t)
     ((evenp n) 'nil)
              ((= 1 n) 'nil)
              (t (let ((limit (floor (sqrt n))))
                      (do ((i 3 (incf i 2)))
                          ((> i limit) t)
                          (if (= 0 (mod n i)) (return-from primep 'nil)))))))

(defun ConsecutivePrime(i j)
  (let ((num 0))
    (loop for k from 0 to 1000
 do(if (null (primep (+ (* k k) (+ j (* i k)))))
       (return num)
(incf num)))
   num))

(defun Euler27()
  (let ((currenta 0)
         (currentb 0)
         (maxnum 0))
    (loop for a from -998 to 999
        do(loop for b from 1 to 999
             do(let ((currentaccount (ConsecutivePrime a b)))
                      (if (progn (> currentaccount maxnum))
                          (progn (setq currenta a)
                                    (setq currentb b)
                                    (setq maxnum currentaccount))))))
    (* currentb currenta)))

No comments:

Post a Comment