Số gần chính phương

Xem dạng PDF

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

Hãy đọc nội quy trước khi bình luận.



  • 0
    NahImNotBtBro  đã bình luận lúc 21, Tháng 4, 2025, 15:01 sửa 3

    def tt(): n = int(input()) # Read input gancp = set() # Set to store numbers a = 0 # Start with a = 0

    while True:
        x = a * a  # Square of a
        y1 = x - 1  # Number before the square
        y2 = x + 1  # Number after the square
    
        if y1 > n:  # If y1 exceeds n, break the loop
            break
    
        if y1 >= 0:  # If y1 is valid, add it to the set
            gancp.add(y1)
    
        if y2 <= n:  # If y2 is valid, add it to the set
            gancp.add(y2)
    
        if a > n + 2:  # If a exceeds n + 2, break the loop
            break
    
        a += 1  # Increment a for the next iteration
    
    print(len(gancp))  # Print the number of unique valid numbers in the set
    

    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


  • 0
    Minh_Pham  đã bình luận lúc 20, Tháng 4, 2025, 14:55

    bạn nào giúp mình bài này với,scratch nhanha


  • 0
    ngominhnhat  đã bình luận lúc 20, Tháng 4, 2025, 14:41

    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()