Помогите оптимизировать. Код отрабатывает правильно с числами до 10 разрядов,дальше зависон машины. С нулями еще пока не работал. Логика такая. Сначала генерирую список чисел с неубываемыми цифрами и добавляю их в list1. После чего перебираю list и суммирую степени через двумерный массив func, чтобы не считать лишний раз степени ,формирую list2. После чего проверяю еще раз ,есть ли в этом списке числа армстронга. Делал чисто по этому шаблону https://acmp.ru/article.asp?id_text=198. Может кто подсказать,гдн тратиться времени много import java.util.Iterator; import java.util.TreeSet; public class Solution { public static long [][] mass; static{ mass=new long [10][20]; for(int i=1;i<10;i++){ for(int j=1;j<20;j++){ mass[i][j]=(long)Math.pow(i,j); } } } public static void main(String[] args) { TreeSet<Long> list=new TreeSet<>(); TreeSet<Long> list2=new TreeSet<>(); TreeSet<Long> list3=new TreeSet<>(); long N=Long.MAX_VALUE; long numb=0; while (numb<N){ numb++; int k=1; long buf=0; int count=0; if (numb%10!=0) list.add(numb); else{ while((numb)%(k*10)==0){ k=k*10; buf=numb/k; count++; } long end=buf%10; buf=buf*(int)Math.pow(10,count); for (int i=1;i<count+1;i++){ buf=buf +end*(int)Math.pow(10,count-i); } list.add(buf); numb=buf; } } //формируем list с неубывающими числами for(long s:list) { long temp=s; long sum=0; long ost=0; int deg = (int)Math.log10(temp)+1; int i=0; while(i<deg){ ost=temp%10; sum=sum+func((int)ost,deg); temp=temp/10; i++; } list2.add(sum); } //формируем list2 со всеми числами из list (потенциальные числа армстронга) for(long s:list2) { long temp=s; long sum=0; long ost=0; int deg = (int)Math.log10(temp)+1; int i=0; while(i<deg){ ost=temp%10; sum=sum+func((int)ost,deg); temp=temp/10; i++; } if(sum==s) list3.add(sum); } //проверяем,являются ли числа из лист 2 числами армстронга System.out.println(list3); } public static long func(int i,int j){ return Solution.mass[i][j]; } }