如何打印不大于给定正整数N的所有素数?

时间:2017-04-28 15:42:36

标签: list prolog

如何打印不大于给定正整数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

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