import java.util.ArrayList; import java.util.Arrays; public class row { static ArrayList<Long> kwAList = new ArrayList<Long>(Arrays.asList(0l, 1l, 4l, 9l, 16l, 25l, 36l, 49l, 64l, 81l)); static long getPowSum(long number) { long result = 0; for (; number > 0;) { result += kwAList.get((int) (number % 10)); number /= 10; } return result; } public static void main(String[] args) { long k, a, b; // long tStart = System.currentTimeMillis(); k = Long.valueOf(args[0]); a = Long.valueOf(args[1]); b = Long.valueOf(args[2]); long counter = 0; long iBottom = getBottom(k, a); long iTop = getTop(k, b); for (long i = iBottom; i <= iTop; i++) { if (isStupid(k, i)) { // System.out.println("i: " + i + ", isStupid: " + isStupid(k, // i)); break; } if (i % k == 0) { if (i / k == getPowSum(i)) { // System.out.println("i: " + i + ", pow: " + getPowSum(i)); counter++; } } } System.out.print(counter); // long tStop = System.currentTimeMillis(); // System.out.println("Time in ms: " + (tStop - tStart)); } private static long getTop(long k, long b) { long res = k > b ? k : b; // System.out.println("iTop: " + res); return res; } private static long getBottom(long k, long a) { long res = k > a ? k : a; // System.out.println("iBottom: " + res); return res; } private static boolean isStupid(long k, long i) { String iStr = String.valueOf(i); return k * (iStr.length() * 81 + 1) < i; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import java.util.ArrayList; import java.util.Arrays; public class row { static ArrayList<Long> kwAList = new ArrayList<Long>(Arrays.asList(0l, 1l, 4l, 9l, 16l, 25l, 36l, 49l, 64l, 81l)); static long getPowSum(long number) { long result = 0; for (; number > 0;) { result += kwAList.get((int) (number % 10)); number /= 10; } return result; } public static void main(String[] args) { long k, a, b; // long tStart = System.currentTimeMillis(); k = Long.valueOf(args[0]); a = Long.valueOf(args[1]); b = Long.valueOf(args[2]); long counter = 0; long iBottom = getBottom(k, a); long iTop = getTop(k, b); for (long i = iBottom; i <= iTop; i++) { if (isStupid(k, i)) { // System.out.println("i: " + i + ", isStupid: " + isStupid(k, // i)); break; } if (i % k == 0) { if (i / k == getPowSum(i)) { // System.out.println("i: " + i + ", pow: " + getPowSum(i)); counter++; } } } System.out.print(counter); // long tStop = System.currentTimeMillis(); // System.out.println("Time in ms: " + (tStop - tStart)); } private static long getTop(long k, long b) { long res = k > b ? k : b; // System.out.println("iTop: " + res); return res; } private static long getBottom(long k, long a) { long res = k > a ? k : a; // System.out.println("iBottom: " + res); return res; } private static boolean isStupid(long k, long i) { String iStr = String.valueOf(i); return k * (iStr.length() * 81 + 1) < i; } } |