This comment is reply for 4865 kozima: (meertens n) で n 桁以下...(Meertens数). Go to thread root.
kozima #4877(2007/12/19 00:44 GMT) [ Common Lisp ] Rating1/1=1.00
少し効率化して時間が 2/3 程度になりました。寝てる間に20桁まで探させてみたところ約三時間で終わりましたが、結局一つしか見つからなくてちょっと残念です。
1 2 3 4 5 6 7 8 9 10 11 12 13
(defun f (primes basis bound prod sum zero-ok) (declare (optimize (speed 3) (safety 0)) (type integer bound prod sum)) (loop repeat (if zero-ok 10 9) with p fixnum = (car primes) and prest = (cdr primes) and b integer = (car basis) and brest = (cdr basis) for newbd integer = (if zero-ok bound (floor bound p)) then (floor newbd p) for newprod integer = (if zero-ok prod (* prod p)) then (* newprod p) for newsum integer = (if zero-ok sum (+ sum b)) then (+ newsum b) while (and (plusp newbd) (<= newprod newsum)) nconc (if prest (f prest brest newbd newprod newsum t) (if (= newprod newsum) (list newsum) nil))))
Rating1/1=1.00-0+
[ reply ]
kozima
#4877()
[
Common Lisp
]
Rating1/1=1.00
少し効率化して時間が 2/3 程度になりました。寝てる間に20桁まで探させてみたところ約三時間で終わりましたが、結局一つしか見つからなくてちょっと残念です。
(defun f (primes basis bound prod sum zero-ok) (declare (optimize (speed 3) (safety 0)) (type integer bound prod sum)) (loop repeat (if zero-ok 10 9) with p fixnum = (car primes) and prest = (cdr primes) and b integer = (car basis) and brest = (cdr basis) for newbd integer = (if zero-ok bound (floor bound p)) then (floor newbd p) for newprod integer = (if zero-ok prod (* prod p)) then (* newprod p) for newsum integer = (if zero-ok sum (+ sum b)) then (+ newsum b) while (and (plusp newbd) (<= newprod newsum)) nconc (if prest (f prest brest newbd newprod newsum t) (if (= newprod newsum) (list newsum) nil))))Rating1/1=1.00-0+