检查数字是否为素数

时间:2018-04-13 17:44:53

标签: scheme racket

我正在编写一个小函数来检查数字是否为素数。我很难转换我在C ++中检查它的方式。主要是运算符。

if( ( (n % 2) == 0) || (n != 1) )
   ***recursive again***
else
    "Done";


(define prime
  (lambda (n)
    (if (= n 1) n
        (if (or (= (modulo n 2) 0) (not ( = n 1))) prime(n)
            (display "Done")
            )
        )
    )
  )

谢谢

2 个答案:

答案 0 :(得分:0)

这是一个识别素数的简单函数:

(define (prime? n)
  (let loop ((d 2))
    (cond ((< n (* d d)) #t)
          ((zero? (modulo n d)) #f)
          (else (loop (+ d 1))))))

你对Scheme有很多误解,也有关于素数的误解。和老师谈谈;这就是他的目的。

答案 1 :(得分:0)

命名循环是一个高级工具,如果这是作业,我猜老师正在寻找这样的东西,使用本地函数定义来进行递归

(define (prime? n)
  (define (f n c)
    (cond [(< n (* c c)) #t]
          [(zero? (modulo n c)) #f]
          [else (f n (add1 c))]))
  ;in
  (f n 2))