見出し画像

prologによる素数生成式

gen_prime(17). のように入力するとオイラーの素数生成多項式で計算された結果が出力されます。nは0からq-1まで代入されます。他に、q=2,3,5,11,17,41 など。

| ?-gen_prime(17).
0:17
1:19
2:23
3:29
4:37
5:47
6:59
7:73
8:89
9:107
10:127
11:149
12:173
13:199
14:227
15:257
16:289
※ 289  = 17x17なので素数ではない

ソースコード

gen_prime(N) :-
   gen_prime_aux(N,0),
   !.
gen_prime_aux(N,N) :-
   !.
gen_prime_aux(N,M) :-
   X is M*M+M+N,
   write(M),
   write(:),
   write(X),
   nl,
   M1 is M+1,
   gen_prime_aux(N,M1).

いいなと思ったら応援しよう!