Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %#4
- %Предикат даблфак принимает два аргумента,запускает проверку на четность числа N
- doublefac(N,Res) :-
- integer(N),integer(Res),
- even(N,Res).
- %В зависимости от четности числа подаем в главный предикат цифру,с которой начинаем умножение
- even(N,Res):-
- 0 is N mod 2 , main(N,Res,2).
- even(N,Res):-
- 1 is N mod 2 , main(N,Res,1).
- %Если изменяемое N и заданный нам факториал совпали,то true,а иначе продолжаем проверку до тех пор
- %пока число N меньше заданного факториала
- main(X,X,K).
- main(N,Res,K):-
- N<Res, N1 is N*K, K1 is K+2, main(N1,Res,K1).
- %тесты: doublefac(4,8).(true) doublefac(5,15).(true) doublefac(4,5)(false). doublefac(5,16).(false)
- %#5
- even(N):-
- 0 is N mod 2.
- %тесты even(3). even(4). even(6).
- %#6 проверка на простоту.
- % запомним К-как корень из N (для ускорения алгоритма определения простоты)
- simple(N):-
- integer(N),K is sqrt(N),check(N,K,2).
- %если накапливаемое I стало больше корня,то результат тру,иначе продолжаем проверку.
- check(N,K,I):-
- I>K.
- check(N,K,I):-
- (I<K;I=K),0 =\= N mod I,I1 is I+1,check(N,K,I1).
- %тесты: simple(3). simple(128). simple(71). simple(243). true false true false
- %#7 сиракузская пос-ность
- sirakuz(N,A0):-
- number(N),number(A0),building(N,A0,0).
- %N-кол-во элементов в послед,А0-нач.элемент,К-счетчик элементов.
- building(N,A,K):-
- K<N,0 is A mod 2,write(A),write(' '),A1 is A//2,K1 is K+1,building(N,A1,K1).
- building(N,A,K):-
- K<N,1 is A mod 2,write(A),write(' '),A1 is 3*A+1,K1 is K+1,building(N,A1,K1
- %тесты:sirakuz(5,69). sirakuz(3,4). sirakuz(4,58).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement