/* Primes (cp version) in Picat. Calculating primes using cp. Note: Picat has an efficient check for primes as built-in (prime/1). This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go ?=> N = 1000, Primes = new_list(N), Primes :: 0..1, NumPrimes #= sum(Primes), foreach(I in 2..N) is_prime(I,Primes[I]) end, Vars = Primes ++ [NumPrimes], solve(Vars), println(primes=[I : I in 1..N, Primes[I] == 1]), println(numPrimes=NumPrimes), nl. go => true. is_prime(X,B) => X #> 1, fd_max(X) = Max, Len = 1+ceiling(sqrt(Max)), B :: 0..1, % Have to hard code for 2 and 3 (X #= 2 #\/ X #= 3 #\/ sum([X mod I #> 0 : I in 2..1+ceiling(sqrt(Max))]) #= Len-1 ) #<=> B#=1.