Hướng dẫn giải của Primes and Clock
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả:
Bài này cần một kĩ thuật kiểm tra số nguyên tố tốt hơn sàng nguyên tố hay kiểm tra đến căn thông thường mới có thể ăn được hết các test, code tham khảo mình để ở đây:
import random
def power(x, y, p):
res = 1
x = x % p
while y > 0:
if (y & 1):
res = (res * x) % p;
y = y >> 1
x = (x * x) % p
return res
def miillerTest(d, n):
a = 2 + random.randint(1, n - 4)
x = power(a, d, n)
if x == 1 or x == n - 1:
return True
while d != n - 1:
x = (x * x) % n
d *= 2
if x == 1:
return False
if x == n - 1:
return True
return False
def isPrime(n, k):
if n <= 1 or n == 4:
return False
if n <= 3:
return True
d = n - 1
while d % 2 == 0:
d //= 2
for i in range(k):
if miillerTest(d, n) == False:
return False
return True
a = [0, 1, 2, -1, -1, 5, 9, -1, 8, 6]
def upSideDown(N):
res = 0
while N:
digit = N % 10
N = N // 10
if a[digit] == -1:
return False, res
res = res * 10 + a[digit]
return True, res
if __name__ == '__main__':
K = 4
for i in range(int(input())):
N = int(input())
oke, revN = upSideDown(N)
if oke and isPrime(N, K) and isPrime(revN, K):
print("YES")
else:
print("NO")
Bình luận