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).