#include #include #include #include #include #include long long int scanInput(){ long long int a = 0ll; scanf("%lld", &a); return a; } //int isPrime(int i){ // int max = (int)(sqrt(i) + 1); // for (int j = 2; j < max; j++) { // if (i % j == 0) // return 0; // } // return 1; // //} // //int * generatePrimes(int distance){ // int * arr = (int *)calloc(distance, sizeof (int)); // int length = 0; // for (int i = 2; i < distance; i++){ // if (isPrime(i)) // arr[length++] = i; // } // return arr; //} // //long long int numberOfWaysFromPoint(int * primes, long long int * arr, int distance, int point){ // if (arr[primes[point]] != -1) // return arr[primes[point]]; // long long int sum = 0; // if (distance - primes[point] <= 14) // sum = 1; // for (int i = point + 1; i < distance; i++){ // if (primes[i] == 0) // break; // else if ((primes[i] - primes[point]) <= 14){ // sum += numberOfWaysFromPoint(primes, arr, distance, i); // } // else // break; // } // arr[primes[point]] = sum; // return sum; //} // //long long int calculateNumberOfWays(int * primes, long long int * arr, int distance){ // long long int sum = numberOfWaysFromPoint(primes, arr, distance, 0); // /*for (int i = 0; i < distance; i++) { // if (primes[i] == 0) // break; // if (primes[i] < 14){ // sum += numberOfWaysFromPoint(primes, distance, i); // } // }*/ // return sum; // } // //int main() { // long long int * arr = (long long int *)malloc(sizeof (long long int) * 211); // memset(arr, -1ll, sizeof(long long int) * 211); // int distance = scanInput(); // int * primes = generatePrimes(distance); // long long int sum = calculateNumberOfWays(primes, arr, distance); // printf("%lld\n", sum); // free(primes); // free(arr); // return 0; //} long long int * getDivisors(long long int num, int * max){ *max = (int)sqrt(num) + 1; long long int * divisors = (long long int *)(calloc(*max * 2, sizeof (long long int))); int capacity = *max * 2; int length = 0; for (int i = 1; i < *max; i++){ if (num % i == 0){ divisors[length] = i; if (i != num / i) divisors[capacity - 1 - length] = num / i; length++; } } return divisors; } void processNumber(long long int num) { int max = 0; long long int * divisors = getDivisors(num, &max); int flag = 1; // printf("num: %lld\n\n", num); for (int i = 0; i < max * 2; i++){ // if (divisors[i]) // printf("%lld\n", divisors[i]); } long long sum = 0; for (long long int i = 2; i < 2 * max; i ++){ if (!divisors[i]) continue; sum += divisors[i]; if (sum + 1 < divisors[i]) { flag = 0; break; } } if (flag) printf("Yes\n"); else printf("No\n"); free(divisors); } int main(){ long long int numberOfInputs = scanInput(); for (long long int i = 0; i < numberOfInputs; i++) { long long int processedNumber = scanInput(); if (processedNumber == 1 || processedNumber == 2) printf("Yes\n"); else if (processedNumber & 1) printf("No\n"); else if (processedNumber % 3 && (processedNumber & 3) != 0) printf("No\n"); else processNumber(processedNumber); } return 0; }