欧拉计划 #3 方案,最大素因子不变
Project Euler #3 Scheme, Largest Prime Factor not changing
我一直在尝试解决 Scheme 中的 Project Euler 问题,我已经为问题 #3 写了这篇文章:
(define (largest-prime n c lf)
(define (is-factor? n f)
(if (= (remainder n f) 0)
#t #f))
(define (is-prime? n c)
(cond
((= c 1) #t)
(else
(if (= (remainder n c) 0) #f
(is-prime? n (- c 1))))))
(display `(counter: ,c current largest factor: ,lf))
(newline)
(cond
((= c n) lf)
(else
(if (and (is-factor? n c) (is-prime? c c))
(largest-prime n (+ c 1) c)
(largest-prime n (+ c 1) lf)))))
(display `(largest prime: ,(largest-prime 600851475143 1 0)))
输出一大段文本(显示是为了跟踪程序的进度),示例行是:
(counter: 245337 current largest factor: 1)
我的问题是,无论计数器设置成什么值,最大的因子都不会增加。我在这里做错了什么?
(is-prime? c c)
永远是return#f
,除非c
是1。既然你认为1是唯一的素数,当然它也是每个数字中最大的质因数。
我一直在尝试解决 Scheme 中的 Project Euler 问题,我已经为问题 #3 写了这篇文章:
(define (largest-prime n c lf)
(define (is-factor? n f)
(if (= (remainder n f) 0)
#t #f))
(define (is-prime? n c)
(cond
((= c 1) #t)
(else
(if (= (remainder n c) 0) #f
(is-prime? n (- c 1))))))
(display `(counter: ,c current largest factor: ,lf))
(newline)
(cond
((= c n) lf)
(else
(if (and (is-factor? n c) (is-prime? c c))
(largest-prime n (+ c 1) c)
(largest-prime n (+ c 1) lf)))))
(display `(largest prime: ,(largest-prime 600851475143 1 0)))
输出一大段文本(显示是为了跟踪程序的进度),示例行是:
(counter: 245337 current largest factor: 1)
我的问题是,无论计数器设置成什么值,最大的因子都不会增加。我在这里做错了什么?
(is-prime? c c)
永远是return#f
,除非c
是1。既然你认为1是唯一的素数,当然它也是每个数字中最大的质因数。