【问题标题】:Racket - Find the largest prime in a range球拍 - 在一个范围内找到最大的素数
【发布时间】:2019-10-27 08:55:42
【问题描述】:

我正在编写一个函数最大素数,它消耗两个自然数并产生从下到上范围内的最大素数。 我使用了辅助功能是素数?检查数字是否为素数。

下面是我的代码:

(define (largest-prime bottom top)
  (cond
    [(and (>= top bottom)(equal? true (is-prime? top))) top]
    [(and (< top bottom) (equal? true (is-prime? top))) false]
    [else (largest-prime (sub1 top) bottom)]))

这个功能似乎只适用于某些情况:

> (largest-prime 12 19)
19
> (largest-prime 12 18)
17
> (largest-prime 12 16)
false

谁能告诉我哪里做错了?

【问题讨论】:

    标签: racket


    【解决方案1】:

    您已在 else 情况下切换了 bottomtop,因此您可以将其修复为:

    [else (largest-prime bottom (sub1 top))]
    

    另外需要注意的是,您不需要将is-prime? 的返回值等同于“true”或“false”。简单地使用返回值作为条件就足够了。例如,考虑以下情况:

    (define (largest-prime bottom top)
      (cond
        [(< top bottom) false]
        [(is-prime? top) top]
        [else
         (largest-prime bottom (sub1 top))]))
    

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多