I tried 0/1 at the beginning, I also used something like this:
public static ArrayList<Long> list;
if (N>1) list.add(1l);
if (N>2) list.add(2l);
if (N>3) list.add(3l);
if (N>4) list.add(4l);
if (N>5) list.add(5l);
if (N>6) list.add(6l);
if (N>7) list.add(7l);
if (N>8) list.add(8l);
if (N>9) list.add(9l);
if (N>153) list.add(153l);
if (N>370) list.add(370l);
if (N>371) list.add(371l);
if (N>407) list.add(407l);
if (N>1634) list.add(1634l);
if (N>8208) list.add(8208l);
if (N>9474) list.add(9474l);
if (N>54748) list.add(54748l);
if (N>92727) list.add(92727l);
if (N>93084) list.add(93084l);
if (N>548834) list.add(548834l);
if (N>1741725) list.add(1741725l);
if (N>4210818) list.add(4210818l);
if (N>9800817) list.add(9800817l);
if (N>9926315) list.add(9926315l);
if (N>24678050) list.add(24678050l);
if (N>24678051) list.add(24678051l);
if (N>88593477) list.add(88593477l);
if (N>146511208) list.add(146511208l);
if (N>472335975) list.add(472335975l);
if (N>534494836) list.add(534494836l);
if (N>912985153) list.add(912985153l);
if (N>4679307774l) list.add(4679307774l);
if (N>32164049650l) list.add(32164049650l);
if (N>32164049651l) list.add(32164049651l);
if (N>40028394225l) list.add(40028394225l);
if (N>42678290603l) list.add(42678290603l);
if (N>44708635679l) list.add(44708635679l);
if (N>49388550606l) list.add(49388550606l);
if (N>82693916578l) list.add(82693916578l);
if (N>94204591914l) list.add(94204591914l);
if (N>28116440335967l) list.add(28116440335967l);
if (N>4338281769391370l) list.add(4338281769391370l);
if (N>4338281769391371l) list.add(4338281769391371l);
if (N>21897142587612075l) list.add(21897142587612075l);
if (N>35641594208964132l) list.add(35641594208964132l);
if (N>35875699062250035l) list.add(35875699062250035l);
and nothing. This TASK is driving me CRAZY. Can anybody help me?package com.codegym.task.task20.task2025;
import java.util.*;
/*
Number algorithms
*/
public class Solution {
public static ArrayList<Long> list; //synchronizacja
public static long szukanaLiczba;
private static long[][] pows;
private static void genPows(int N1) {
if (N1 > 20) throw new IllegalArgumentException();
pows = new long[10][N1 + 1];
for (int i = 0; i < pows.length; i++) {
long p = 1;
for (int j = 0; j < pows[i].length; j++) {
pows[i][j] = p;
p *= i;
}
}
}
private static List<Long> results;
private static int N1;
private static void search(int depth, long num, long pow) {
if (depth == N1) {
if (pow == num && num<szukanaLiczba) results.add(num);
return;
}
num *= 10;
for (int i = 0; i < 10; i++) {
if (depth == 0 && i == 0) continue;
search(depth + 1, num + i, pow + pows[i][N1]);
}
}
public static List<Long> generate(int maxN) {
if (maxN >= 20) throw new IllegalArgumentException();
results = new ArrayList<>();
genPows(maxN);
for (N1 = 1; N1 <= maxN; N1++) {
search(0, 0, 0);
}
Collections.sort(results);
return results;
}
/*****************************************************************/
public static long[] getNumbers(long N) {
List<Long> list = new ArrayList<>();
long temp=N;
szukanaLiczba = N;
int count=0;
while (temp>0) {
count++;
temp/=10;
}
list.addAll(generate(count));
long[] result = new long[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(8208)));
long b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(1_000_000)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
}
}