このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/636
#  [1] プログラミングC 
#  [2] 5000以下の素数を1行に10個ずつ、画面に出力するC言語のプログラムを作成しなさい。 
#  

'5000以下の素数を1行に10個ずつ、画面に出力する' :-
        '5000以下の素数を'(_5000以下の素数),
        '1行に10個ずつ、画面に出力する'(_5000以下の素数).

'5000以下の素数を'(_5000以下の素数) :-
        素数生成(5000,_5000以下の素数).

素数生成(N,X) :-
        findall(M,for(2,M,N),L),
        エラトステネスの篩(L,X).

エラトステネスの篩([],[]) :- !.
エラトステネスの篩([A|R1],[A|R2]) :-
        エラトステネスの篩(A,R1,L),
        エラトステネスの篩(L,R2).

エラトステネスの篩(_,[],[]) :- !.
エラトステネスの篩(N,[A|R1],R2) :-
        0 is A mod N,
        エラトステネスの篩(N,R1,R2),!.
エラトステネスの篩(N,[A|R1],[A|R2]) :-
        エラトステネスの篩(N,R1,R2).

'1行に10個ずつ、画面に出力する'([]) :- !.
'1行に10個ずつ、画面に出力する'(L) :-
        length(L0,10),
        append(L0,R,L),
        concat_atom(L0,',',S),
        write_formatted('%t\n',[S]),
        '1行に10個ずつ、画面に出力する'(R),!.
'1行に10個ずつ、画面に出力する'(L) :-
        concat_atom(L,',',S),
        write_formatted('%t\n',[S]),!.