1

我正在研究一个谓词,它将计算给定数字的除数数量。它不会计算所有这些,但足以让我知道它有两个以上的因素。这是我所拥有的:

countFactors([_,_,_,_X]):-!.
countFactors(Product, Count,Divisor, _X):-
     Divisor =< Product/2,
     Product mod Divisor = 0,
     NewC is Count + 1,
     NextD is Divisor + 1,
     countFactors(Product,NewC, NextD, NewC).

但是,运行 countFactors(16,0,2,X)。简单地返回 false,而我希望它返回 X = 2

编辑:好的,所以现在我意识到为什么它返回错误:如果所讨论的除数是一个因素,它工作正常,并且递归。但是,如果它不是一个因子,那么它给出 false,但不会递增到下一个除数,它只是停止并返回 false。

所以我的问题是,我该如何纠正这个问题?

4

1 回答 1

1

您的代码中有一些错误,我发布了一些更正。也许你需要做一些小的修改。

%% count all factors of Product
%
countFactors(Product, Count, Divisor, Tot) :-
     Divisor > Product/2,
     !, Tot is Count.
countFactors(Product, Count, Divisor, Tot):-
     (   Product mod Divisor =:= 0
     ->  NewC is Count + 1
     ;   NewC is Count
     ),
     NextD is Divisor + 1,
     countFactors(Product, NewC, NextD, Tot).
于 2012-04-11T18:49:34.603 回答