intqmi(int ai, int bi, int pi) { longlong res = 1; while (bi) { if (bi & 1)//位与,判断当前最低位是否为1 res = res * ai % pi; ai = (longlong) ai * ai % pi; //根据公式推到,a^k被拆分, //且后一个ai值为当前值的平方(bi被当作二进制数处理的原因) bi >>= 1; } return res; }
intmain() { int n; cin >> n; while (n--) { int ai, bi, pi; scanf("%d%d%d", &ai, &bi, &pi); printf("%d\n", qmi(ai, bi, pi)); } return0; }
intqmi(int ai, int bi, int pi) { longlong res = 1; while (bi) { if (bi & 1) res = res * ai%pi; bi >>= 1; ai = (longlong)ai*ai%pi; } return res; }
intmain() { int n; cin >> n; while (n--) { int ai, pi; scanf("%d%d", &ai, &pi); int res = qmi(ai, pi - 2, pi); if (ai%pi) printf("%lld\n", res); else puts("impossible"); } return0; }