我是prolog的新手所以忍受我,
所以我有一些代码,其中我抓住了所有素数达到一定数量。
primes_up_to(X,L):-
findall(Y,
(between(2,X,Y), is_prime(Y) ),
L).
我现在想要获取该列表并检查每个素数是否可以划分为X,因此我可以对其进行因子分解。
到目前为止,这是我的代码。
factorise(X, F):-
X > 3,
primes_up_to(X, L),
write(L),
如何使用L检查给定的列表元素是否可以划分为X
我认为我必须写下这样的人:
0 is ListElement mod X
但我需要为每个元素
执行此操作答案 0 :(得分:1)
你写“分解”所以我想你有兴趣知道多种因素。
我提出以下factors/3
factors(1, _, []).
factors(Num, [H|Tp], [H|Tf]) :-
Num > 1,
0 is mod(Num,H),
Quot is Num // H,
factors(Quot, [H|Tp], Tf).
factors(Num, [H|Tp], Tf) :-
Num > 1,
\+ 0 is mod(Num,H),
factors(Num, Tp, Tf).
如果您对多种因素不感兴趣,则代码可以更简单
factors(_, [], []).
factors(Num, [H|Tp], [H|Tf]) :-
0 is mod(Num,H),
factors(Num, Tp, Tf).
factors(Num, [H|Tp], Tf) :-
\+ 0 is mod(Num,H),
factors(Num, Tp, Tf).