此问题位于SICP(练习1.26) 它说没有#34; square"的定义,它运行得更慢。 它的目的是检查数字是否为素数。 这是更快的版本:
如果没有" square"的定义,请使用
(* (expmod base (/ exp 2) m)
(expmod base (/ exp 2) m))
据说 O ( n )
答案 0 :(得分:2)
如果您不使用(expmod base (/ exp 2) m)
,则需要对square
进行两次评估。如果您将结果与let
绑定并将其传递给square
,那么它的复杂性就会相同。
答案 1 :(得分:2)
不是$scope.setData = function(survey, choice) {
var item = $filter('filter')(keepAllData, {
surveyId: survey.id
});
if (!item.length) {
keepAllData.push({
'surveyId': survey.id,
'choiceId': choice.id
});
} else {
item[0].choiceId = choice.id;
}
console.log(keepAllData);
}
过程使得它更快,而是缓存中间值。使用square
可以使它同样快:
let
关键是(let ((tmp (expmod base (/ exp 2) m)))
(* tmp tmp))
只进行一次。