Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
512M
Input:
stdin
Output:
stdout
Tác giả:
Dạng bài
Ngôn ngữ cho phép
Python, Scratch
Số tự nhiên ~X~ là số chính phương khi có một số tự nhiên ~a~ sao cho ~a × a = X~.
Số gần chính phương là số tự nhiên ~X~ ~–~ ~1~ và ~X + 1~ với ~X~ là số chính phương.
Cho số tự nhiên ~N~. Hãy đếm số lượng số gần chính phương nhỏ hơn hoặc bằng ~N~.
Input
- Gồm một số tự nhiên ~N~ ~(1 ≤ N ≤ 10^{12})~.
Output
- Một số tự nhiên là kết quả của bài toán.
Scoring
- Subtask 1 (60% số điểm): ~N ≤ 10^3~.
- Subtask 2 (20% số điểm): ~N ≤ 10^6~.
- Subtask 3 (20% số điểm): không có ràng buộc gì thêm.
Sample input
9
Sample output
6
Note
- Các số thoả mãn: ~0~, ~1~, ~2~, ~3~, ~5~, ~8~.
Bình luận
def tt(): n = int(input()) # Read input gancp = set() # Set to store numbers a = 0 # Start with a = 0
tt() # Call the function to run the program
Mô tả mã: Nhập dữ liệu: Chương trình bắt đầu bằng cách yêu cầu người dùng nhập vào một số nguyên n.
Tạo set gancp: Set này dùng để lưu trữ các số thỏa mãn các điều kiện trong vòng lặp.
Logic trong vòng lặp:
Với mỗi số nguyên a, bắt đầu từ 0, chương trình tính bình phương của a (x = a * a).
Sau đó tính hai số: y1 = x - 1 và y2 = x + 1.
Nếu y1 lớn hơn n, vòng lặp sẽ dừng lại.
Nếu y1 lớn hơn hoặc bằng 0, nó sẽ thêm y1 vào set gancp.
Nếu y2 nhỏ hơn hoặc bằng n, nó sẽ thêm y2 vào set gancp.
Vòng lặp sẽ dừng nếu a lớn hơn n + 2.
Kết quả: Cuối cùng, chương trình in ra độ dài của set gancp, tức là tổng số giá trị duy nhất mà thỏa mãn các điều kiện.
Phần trên là Tiếng Anh; ai không hiểu thì đọc ở đây
bạn nào giúp mình bài này với,scratch nhanha
import math def tt(): n=int(input()) gancp=set() a=0 while True: x=a*a y1=x-1 y2=x+1 if y1>n: break if y1>=0: gancp.add(y1) if y2<=n: gancp.add(y2) if a>n+2: break a+=1 print(len(gancp)) tt()