微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

序言中给定数字的质因数列表与基础知识

如何解决序言中给定数字的质因数列表与基础知识

实际上我在学校有一项任务是找到给定数字的所有质因数并将它们作为列表返回,但我有点挣扎,因为我在序言方面还是新手。 这是我的代码

divisible(A,B) :-A mod B =:= 0,!.
divisible(A,B) :-A > B + 1,divisible(A,B + 1).
isPrime(2).
isPrime(A) :-not(divisible(A,2)).

nextPrime(A,P) :-P is A + 1,isPrime(P),!.
nextPrime(A,P) :-A0 is A + 1,nextPrime(A0,P).

primeFactors(B,L):-primeFactors(B,L,2).

primeFactors(2,[2],_).
primeFactors(3,[3],_).
primeFactors(B,C):-B>3,C<B//2,B mod C =:= 0,add_tail(L,C,L1),B1 is B//C,primeFactors(B1,L1,C).
primeFactors(B,nextPrime(C,C1),primeFactors(B,C1).

add_tail([],X,[X]).
add_tail([H|T],[H|L]):-add_tail(T,L).

想法是从 primeFactors/2 开始,然后从那里转发到 primeFactors/3,其中 C 是素数除法器,因此用户更容易调用它。 B 是给定的数字,L 是我要返回的列表。

我应该指出,isPrime、nextPrime 和 add_tail 单独工作得非常好。

我看到网上有一些解决这个问题的方法,但我仍然只有prolog的基本知识。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。