Как проверить, является ли целое число кубом или нет в общем лиспе? - PullRequest
1 голос
/ 23 апреля 2019

Мне нужно определить функцию lisp iscube, которая принимает целое число в качестве аргумента и возвращает T, если n является кубом, и nil в противном случае.

Я знаю только, как сделать целое число кубом, но как определить, что целое число является кубом?

Мне не разрешается использовать какие-либо специальные математические функции, такие как log, для этой задачи ...

пример iscube (8) вернет true, так же, как iscube (-8) вернет true.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы должны заметить, что это не так умно, как кажется, чтобы сделать домашнюю работу на SO.Но так как я должен заполнить свой перерыв чем-то забавным, вы можете начать с этого:

(defun is-cube-p (n)
   "Returns T if N is a cube number."
   (zerop (nth-value 1 (round (abs (expt n 1/3))))))

CL-USER> (is-cube-p -8)
T
CL-USER> (is-cube-p 8)
T
CL-USER> (is-cube-p 9)
NIL

Я не математик и не профессионал CL, поэтому нет гарантии, что это лучший способ решить вашу проблему.проблема.

0 голосов
/ 24 апреля 2019

Я дам решение, похожее на решение Мартина, и оно будет медленнее.Но это может быть более понятным для некоторых людей.

(defun is-cube-p (n)
  (let* ((real-root (expt n 1/3))
         (real-root-int-part (round real-root))
         (m (expt real-root-int-part 3)))
    (= n m)))

Идея состоит в том, чтобы сначала вычислить кубический корень из n, а затем найти целую часть корня.Мы кубируем целую часть обратно в m и сравниваем m и n.Если m == n, то n является кубом.

...