You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.3 KiB
C++

#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a, ll b, ll m)
{
ll r = 1;
for (; b; b >>= 1, a = a * a % m)
if (b & 1)
r = r * a % m;
return r;
}
bool test(ll n, ll a, ll d)
{
if (n == 2) return true;
if (n == a) return false;
if (!(n & 1)) return false;
while (!(d & 1)) d >>= 1;
ll t = qpow(a, d, n);
while (d != n - 1 && t != n - 1 && t != 1)
{
t = t * t % n;
d <<= 1;
}
return t == n - 1 || (d & 1) == 1;
}
bool isprime(ll x)
{
if (x == 1 || x == 2) return true;
int a[] = {2, 3, 5, 7, 11, 13, 17, 19};
for (int i = 0; i < 8; i++)
{
if (a[i] == x) return true;
if (!test(x, a[i], x - 1)) return false;
}
return true;
}
int main()
{
/*set<int> S;
for (int i = 1; i <= 100; i++)
for (int j = 1; j <= 100; j++)
for (int k = 1; k <= 100; k++)
for (int l = 1; l <= 100; l++)
if (i * j == k * l)
S.insert(i + j + k + l);
for (int i = 1; i <= 400; i++)
if (S.count(i) == 0)
cout << i << " ";*/
int T, n;
scanf("%d", &T);
while (T--)
scanf("%d", &n), puts(isprime(n) ? "No" : "Yes");
return 0;
}