Определение автоморфных чисел на отрезке [m, n] - Prolog
Формулировка задачи:
Помогите, пожалуйста, с задачей: Составьте программу для нахождения автоморфных чисел в отрезке [m,n]. Автоморфным числом называется число, которое равно последним числам своего квадрата. Например, 5^2=25, 6^2=36, 25^2=625.
У меня получилось неправильно, потому, что я использовал принцип проверки суммы остатков от деления (числа и его квадрата), вот что у меня получилось:
Листинг программы
- predicates
- step(integer,integer)
- step2(integer,integer,integer,integer,integer,integer)
- goal
- write("from: "),
- readint(X),
- write("to: "),
- readint(X1),
- step(X,X1).
- clauses
- step(X,X1):-X1>X,!,XX=X*X,step2(X,X1,XX,0,0,X).
- step2(X,X1,XX,Y,YY,FX):-X div 10 > 0,!,
- X2= X div 10,
- XX2=XX div 10,
- Y2 =Y+(X mod 10),
- YY2=YY+(XX mod 10),
- %write(Y2,", ",YY2),
- step2(X2,X1,XX2,Y2,YY2,FX).
- step2(X,X1,XX,Y,YY,FX):-X2= X div 10,
- Y2=Y+(X mod 10),
- YY2=YY+(XX mod 10),
- X11=FX+1,
- X11<=X1,Y2=YY2,!,
- write(FX,", "),
- step(X11,X1);
- X2= X div 10,
- Y2=Y+(X mod 10),
- YY2=YY+(XX mod 10),
- X11=FX+1,
- X11<=X1,!,
- %write(X,", "),
- step(X11,X1).
Решение задачи: «Определение автоморфных чисел на отрезке [m, n]»
textual
Листинг программы
- predicates
- chk(integer,integer,integer)
- is_Automorph(integer)
- clauses
- chk(N,Q,P) :- N=Q mod P, !.
- chk(N,Q,P) :- Q>P, P1=P*10, chk(N,Q,P1), !.
- chk(_,_,_) :- fail.
- is_Automorph(N) :- Q=N*N, chk(N,Q,10).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д