このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/678
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  以下の機能を持つプログラムを作ること。 
#   
#  -1から100の数字の中から素数を抽出する (配列に直接数字を指定することは不 
#  可) 
#  -抽出した素数を大きい順(降順)にソートする 
#  -ソートした素数を1行につき5個表示する(6個目以降は次の行に表示する) 
#   
#  以下の点に関して工夫をした場合は加点の対象とする 
#   
#  -素数の計算時間の低減 
#  -見つけた素数の数のカウント 
#  -ソートのアルゴリズム高速化 
#  -実行時間の表示 
#   
#  作成したプログラムの特徴を提出時のコメントに記入すること 
#  (素数の見つけ方、ソートの仕方、表示方法での工夫など) 
#  

'1から100の数字の中から素数を抽出する (配列に直接数字を指定することは不可)-抽出した素数を大きい順(降順)にソートする-ソートした素数を1行につき5個表示する(6個目以降は次の行に表示する)' :-
        '1から100の数字の中から素数を抽出する'(L1),
        '抽出した素数を大きい順(降順)にソートする'(L1,L2),
        'ソートした素数を1行につき5個表示する'(L2).        

'1から100の数字の中から素数を抽出する'(L1) :- findall(M,for(2,M,N),L),'エラトステネスの篩'(L,L1),!.

'抽出した素数を大きい順(降順)にソートする'(L1,L2) :- sort(L1,L3),reverse(L3,L2).

'ソートした素数を1行につき5個表示する'(L) :-
        '5個切り取り表示'(L,R),
        length(R,Len),
        Len < 5,
        '最終行は5個に満たないかもしれない(R),!.

'5個切り取り表示'(R,R) :- length(R,Len),Len < 5,!.
'5個切り取り表示'(L,R) :-
        'N個組'(5,L,X,R),
        concat_atom(X,' ',S1),
        write_formatted('%t\n',[S1]).

'N個組'(N,L,X,R) :-
        length(X,N),
        append(L0,X,R,L),
        length(L0,Len1),
        0 is Len1 mod N.

最終行は5個に満たないかもしれない(R) :- concat_atom(R,' ',S),write_formatted('%t\n',[S]).