to_list(0,[]):-!. to_list(N,[X|Result]):- X is N mod 10, N1 is N //10, to_list(N1,Result). to_num([],Num,Num):-!. to_num([X|Xs],Num,Result):- Num1 is Num*10+X, to_num(Xs,Num1,Result). calc(51,_):-!. calc(T,Num):- to_list(Num,List), (T>0,reverse(List,List)->!,fail; T1 is T+1, to_num(List,0,Num1), Num2 is Num+Num1, calc(T1,Num2)). search(10000,Ans):-!, write(Ans). search(N,Ans):- (calc(0,N)->Ans1 is Ans+1;Ans1 is Ans), N1 is N+1, search(N1,Ans1). main:- search(1,0).