Điểm:
300 (p)
Thời gian:
1.5s
Bộ nhớ:
640M
Input:
bàn phím
Output:
màn hình
Một số nguyên dương \(n\) được gọi là một số siêu nguyên tố nếu \(n\) là số nguyên tố và khi ta
bỏ bao nhiêu chữ số tận cùng của \(n\) thì số tự nhiên mới tạo thành cũng là một số nguyên tố.
Ví dụ:
- Số 317 là số siêu nguyên tố vì số 317 là số nguyên tố, số 31 (bỏ 1 chữ số tận cùng
của 317) là số nguyên tố, số 3 (bỏ 2 chữ số tận cùng của 317) là số nguyên tố. - Số 61 không là số
siêu nguyên tố vì số 6 (bỏ 1 chữ số tận cùng của 61) không là số nguyên tố.
Yêu cầu: Viết chương trình nhập vào từ bàn phím một số nguyên dương \(n\ (0 < n < 10^9)\) và
in ra màn hình một từ khẳng định số \(n\) có phải là số siêu nguyên tố hay không.
Input
- Số nguyên dương \(n\) nhập từ bàn phím (\(0 < n < 10^9\)).
Output
- In ra màn hình một từ
PHAI
nếu \(n\) là số siêu nguyên tố; ngược lại, in ra màn
hình một từKHONG
nếu \(n\) không phải là số siêu nguyên tố
Scoring
- Subtask \(1\) (\(70\%\) số điểm): \(n\le 10^9\) theo đề chuẩn
- Subtask \(2\) (\(30\%\) số điểm): \(n\le 10^{16}\) mở rộng
Example
Test 1
Input
317
Output
PHAI
Test 2
Input
61
Output
KHONG
Bình luận
import math
a = int(input())
kiểm tra số nguyên tố
def z(x):
if x <= 1:
return False
if x <= 3:
return True
if x % 2 == 0 or x % 3 == 0:
return False
i = 5
while i * i <= x:
if x % i == 0 or x % (i + 2) == 0:
return False
i += 6
return True
if not z(a):
print("KHONG")
else:
# Kiểm tra các tiền tố của n
b = str(a)
c = True
for i in range(len(b)):
d = int(b[:len(b) - i])
if not z(d):
c = False
break
if c:
print("PHAI")
else:
print("KHONG")
mn ơi có cách nào rút gọn ko ạ =(((( bị quá tg
SAO TEST 11,10 >10\(x^16\) VẬY??????????????
ai cần hint tui cho nè:
|| Hint
Số siêu nguyên tố phải có 8 chữ số trở xuống.
Chữ số 1 từ trái sang phải là snt, các chữ sau phải là số lẻ.
Nếu cả 2 thỏa mãn thì ta mới kt vét cạn theo đề bài
||
mong các bạn ac bài này
|| Hint
Miller -> AC
||