第三题: import java.util.Scanner; public class Problem3 { private static long pow(long number, long index) { if (index == 0) { return 1; } if (index == 1) { return number; } long mid = index / 2; long r1 = pow(number, mid); return r1 * r1 * pow(number, index - 2 * mid); } private static long getDay(long x, long k) { int day = 0; int base = 1; while (base <= x) { day ++; base *= k; } return day; } private static boolean single(long n, long k, long x) { long days = getDay(x, k); long res = 0; long base = 1; for (long i = 0; i < days; ++ i) { res += (x / base); base *= k; } return res >= n; } private static void solution(long n, long k) { if (n == 1) { System.out.println(1); return; } long left = 2, right = n; if (single(n, k, left)) { System.out.println(2); return; } while (left < right) { //System.out.println(left + " --- " + right + " " + single(n, k, 8)); if (left + 1 == right) { if (single(n, k, left)) { System.out.println(left); } else { System.out.println(right); } return; } long mid = (left + right) / 2; if (single(n, k, mid)) { right = mid; } else { left = mid; } } System.out.println(left); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(), k = scanner.nextInt(); solution(n, k); //System.out.println(single(10, 3, 8)); } }