09/12/24 22:41:59
>>56
% Prolog
'20000~40000までの自然数のうち、数字の9を2個含む素数の個数'(_個) :-
素数生成(40000,_素数ならび),
count((member(N1,_素数ならび),N1>=20000,数字の9を2個含む(N1)),_個).
数字の9を2個含む(N) :-
number_chars(N,L),
count(member('9',L),2),!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
素数生成(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).