如何打印不大于给定正整数N?
的所有素数self._nextQuestion();
如何成为下面的例子?
示例:
a(0).
a(X) :- b(X). b(X) :- X1 is X - 2, write(X), write(' '), a(X1).
output:
?- a(20).
20 18 16 14 12 10 8 6 4 2
答案 0 :(得分:0)
如果is_prime(N)
为素数,您可以定义成功的谓词N
。并且,你必须数而不是下降。 :)
primes_up_to(N) :-
N > 1,
write('2 '),
primes_up_to(3, N).
primes_up_to(C, N) :-
C > N.
primes_up_to(C, N) :-
C =< N,
write_if_prime(N),
C1 is C + 2,
primes_up_to(C1, N).
write_if_prime(N) :-
( is_prime(N)
-> write(N), write(' ')
; true
).
我会将is_prime(N)
的定义作为练习。
答案 1 :(得分:0)
你去吧
divisible(X,Y) :- 0 is X mod Y, !.
divisible(X,Y) :- X > Y+1, divisible(X, Y+1).
isPrime(2) :- true,!.
isPrime(X) :- X < 2,!,false.
isPrime(X) :- not(divisible(X, 2)).
prime(X):- printPrimes(X,0).
printPrimes(X,Y):- X>=Y, isPrime(Y), write(Y), write(' '), Y1 is Y + 1, printPrimes(X,Y1).
printPrimes(X,Y):- X>=Y, \+isPrime(Y), Y1 is Y + 1, printPrimes(X,Y1).
试试这样:
?- prime(20).
2 3 5 7 11 13 17 19