publicclassMain { staticintmax(int... a) { intres=0, n = a.length; if (n == 2) return Math.max(a[0], a[1]); for (int x : a) res = Math.max(res, x); return res; } staticintmin(int... a) { intres=0, n = a.length; if (n == 2) return Math.min(a[0], a[1]); for (int x : a) res = Math.min(res, x); return res; } staticvoidcYes(boolean f) { System.out.println(f ? "Yes" : "No"); } staticvoidcYES(boolean f) { System.out.println(f ? "YES" : "NO"); } staticclassRead { BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in)); StringTokenizerstringTokenizer=newStringTokenizer(""); String next() { while (!stringTokenizer.hasMoreTokens()) { try { stringTokenizer = newStringTokenizer(bufferedReader.readLine()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return stringTokenizer.nextToken(); } intnextInt() { return Integer.parseInt(next()); } } staticReadin=newRead(); staticintqpow(int a, int b) { intres=1; a %= 9901; for (; b > 0; a = a * a % 9901, b >>= 1) if ((b & 1) == 1) res = res * a % 9901; return res; } staticintsum(int a, int b) { if (b == 1) return1; if (b % 2 == 0) return (1 + qpow(a, b / 2)) * sum(a, b / 2) % 9901; return (sum(a, b - 1) + qpow(a, b - 1)) % 9901; }
publicstaticvoidmain(String[] args) { // TODO Auto-generated method stub inta= in.nextInt(), b = in.nextInt(); intres=1; for (inti=2; i * i <= a; i++) { //如果是,从2开始能保证是质数 if (a % i == 0) { intcnt=0; // 记录这个指数的次方 while (a % i == 0) { a /= i; cnt++; } res = res * sum(i, b * cnt + 1) % 9901; } } if (a > 1) res = res * sum(a, b + 1) % 9901; if (a == 0) res = 0; System.out.println(res); }