int k = 25;int prime[25] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 };int index[25];int Kummer(int n, int m, const int p) { int up=0, index = 0; n -= m; while (n != 0 || m != 0) { up += (n%p) + (m%p); if (up >= p) { up = 1; index++; } else up = 0; n /= p; m /= p; } return index;}void disintegrate(int d) { for (int i = 0; i < k; ++i) { index[i] = Kummer(d, 1, prime[i]); }}int KummerPlus(int n, int m, int d) { disintegrate(d); for (int i = 0; i < k; ++i) { if (index[i] == 0) { index[i] = 1 << 30; continue; } for (int j = 0; j < index[i]; ++j) d /= prime[i]; index[i] = Kummer(n, m, prime[i]) / index[i]; } int min = 1<<30; for (int i = 0; i < k; ++i) { if (index[i] < min)min = index[i]; } if (d != 1) { int minn = Kummer(n, m, d); if (minn < min)min = minn; } return min;}