/* * poj1808.c * Created on: 2011-10-12 * Author: bjfuwangzhu */ /* *> 考虑形如x2≡n(mod m)的同余式,其中m > 1,(m,n)=1。 *> 若此同余式有解,则n称为模m的二次剩余;若此同余式无解,则n称为模m的二次非剩余。 *> 设p是一个奇素数,则模p的二次剩余和二次非剩余个数正好是“一半对一半”, *> 下表给出几个较小的素数模的二次剩余和非剩余: *> > p 剩余 非剩余 > 3 1 2 > 5 1,4 2,3 > 7 *> 1,2,4 3,5,6 > 11 1,3,4,5,9 2,6,7,8,10 > 13 *> 1,3,4,9,11,12 2,5,6,7,8,11 > 此外, *> 如果n是模p的二次剩余,则N^((p-1)/2)≡1(mod p) 。如果n是模p的二次非剩余, *> 则N^((p-1)/2)≡-1(mod p) 。 */ #include<stdio.h> #define LL long long int modular_exp(int a, int b, int c) { LL res, temp; res = 1 % c, temp = a % c; while (b) { if (b & 1) { res = res * temp % c; } temp = temp * temp % c; b >>= 1; } return (int) res; } void solve(int a, int p) { a = (a % p + p) % p; if (modular_exp(a, (p - 1) / 2, p) == 1) { puts("1"); return; } puts("-1"); } int main() { #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); #endif int t, i, a, p; scanf("%d", &t); for (i = 1; i <= t; i++) { scanf("%d %d", &a, &p); printf("Scenario #%d:\n", i); solve(a, p); printf("\n"); } return 0; }