BEAUTY.INP | BEAUTY.OUT |
1 6 |
11 23 |
s=[1]*811
s[0],s[1]=0,0
for i in range(2,int(811**0.5)+1):
for j in range(i*i,811,i):
s[j]=0
Đầu tiên ta xem các số từ 0 đến 810 đều là số nguyên tố:
s = [1]*811
. Tiếp theo vì số 0 và số 1 không phải là số nguyên tố nên ta gán lạis[],s[1] = 0,0
. Từ số 2 trở đi ta cho i chạy từ 2 đến phần nguyên của căn bậc hai 811 +1:for i in range(2,int(811**0.5)+1):
. Sau đó dùng vòng lặp j để loại các số là bội của i (hay nói cách khác i là ước của j nên j không phải là số nguyên tố:for j in range(i*i,811,i): s[j]=0
. Sau khi sàng như vậy thì ta sẽ có nếu s[a] = 1 thì a là số nguyên tố.
def sodep(n):
if n == 1:
return 11
j,i = 1,11
while j < n:
i += 1
a,b = str(i),0
for x in range(len(a)):
b += (int(a[x]))**2
if s[b]==1:
j += 1
kq = i
return kq
Chú ý: Số đẹp đầu tiên là số 11.
i
là số đang xét, và ta dùng biếna
đển chuyểni
về kiểu chuỗi để xử lý. Nếui
là số đẹp thì tăngj
lên1
(Số đẹp thứj
sẽ lài
). Sau khi xây dựng hàm thì chỉ việc gọi hàm sodep(n) là ta có kết quả số đẹp thứ n.
s=[1]*811
s[0],s[1]=0,0
for i in range(2,int(811**0.5)+1):
for j in range(i*i,811,i):
s[j]=0
def sodep(n):
if n == 1:
return 11
j,i = 1,11
while j < n:
i += 1
a,b = str(i),0
for x in range(len(a)):
b += (int(a[x]))**2
if s[b]==1:
j += 1
kq = i
return kq
with open("Beauty.INP", "r") as f:
n = int(f.readline().strip())
with open("BEAUTY.OUT", "w") as f:
f.write(str(sodep(n)))
Tác giả: admin
Ý kiến bạn đọc