fork download
  1. #include <stdio.h>
  2. #include <iostream>
  3. using namespace std;
  4. #define ull unsigned long long
  5.  
  6. int quick_pow(int a, int n, int m) {
  7. ull r = 1, p = a % m;
  8. for (; n > 0; n /= 2) {
  9. if (n % 2 == 1)
  10. r = (r * p) % m;
  11. p = (p * p) % m;
  12. }
  13. return r;
  14. }
  15.  
  16. int main() {
  17. int t;
  18. scanf("%d", &t);
  19. ull a, b, c, p, D, tmp;
  20. for (int k = 0; k < t; k++) {
  21. scanf("%llu %llu %llu %llu", &a, &b, &c, &p);
  22. D = ((b*b % p) - (4*(a*c % p) % p) + p) % p;
  23. if (D == 0)
  24. printf("YES\n");
  25. else {
  26. tmp = quick_pow(D,(p-1)/2, p);
  27. if (tmp == 1)
  28. printf("YES\n");
  29. else
  30. printf("NO\n");
  31. }
  32. }
  33. return 0;
  34. }
Success #stdin #stdout 0s 3464KB
stdin
3
1 2 1 7
1 3 1 7
1 3 1 11
stdout
YES
NO
YES