DK05 - Kiểm tra số 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ớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Số chính phương là số tự nhiên mà căn bậc hai của nó là một số tự nhiên. Hoặc nói ngược lại, số chính phương là số bằng bình phương của một số tự nhiên. Nhiệm vụ của bạn là viết chương trình kiểm tra một số nguyên ~n~ nhập vào từ bàn phím có phải là số chính phương hay không?

Input

Số nguyên ~n~ cần kiểm tra có phải số chính phương hay không

Giới hạn

  • ~-10^{12} \le n \le 10^{12}~

Output

Kết quả kiểm tra số chính phương. Nếu số kiểm tra là số chính phương, in ra "YES", ngược lại in ra "NO". Kết quả in ra không có dấu nháy kép

Sample

Input #1
9
Output #1
YES

Bình luận

Please read the guidelines before commenting.



  • 0
    thanhvinh21052015  đã bình luận lúc 28, Tháng 3, 2026, 7:25

    code full AC python 3 cho các anh em cần nữa đây :

    import math

    n = int(input())

    if n < 0:

    print("NO")
    

    else:

    k = int(math.sqrt(n))
    
    if k * k == n:
    
        print("YES")
    
    else:
    
        print("NO")
    

  • 0
    nguyenquocantlt123  đã bình luận lúc 21, Tháng 3, 2026, 12:32

    n = int(input())

    i = 0 while i * i <= n: if i * i == n: print("YES") break i += 1 else: print("NO")


  • 0
    nhatvu2k5devai  đã bình luận lúc 6, Tháng 3, 2026, 19:07

    n = int(input())

    i = 0 while ii <= n: if ii == n: print("YES") break i += 1 else: print("NO")


  • 0
    boitin2025nbk  đã bình luận lúc 5, Tháng 2, 2026, 11:48

    include <iostream>

    include <cmath>

    using namespace std;

    int main() { long long n; cin >> n;

    long long a = sqrt(n);
    
    if (a * a == n) {
        cout << "YES";
    } else {
        cout << "NO";
    }
    
    return 0;
    

    }


  • 1
    dangkhoi1239876  đã bình luận lúc 25, Tháng 1, 2026, 12:47

    mấy thằng đần chép chatgpt.


  • 0
    1239876  đã bình luận lúc 19, Tháng 1, 2026, 10:06

    include <iostream>

    include <cmath>

    using namespace std; long long n, a; int main() { cin >> n; a = sqrt(n); if (a * a == n){ cout << "YES"; } else { cout << "NO"; } return 0; }


  • 0
    dtq18521319  đã bình luận lúc 21, Tháng 12, 2025, 10:18

    print((lambda a: 'YES' if a >= 0 and int(a0.5)2 == a else 'NO' )(int(input())))


  • 0
    PalAgi  đã bình luận lúc 21, Tháng 12, 2025, 9:54

    Cho mình hỏi case 5 là gì vậy ạ C#

    using System;
    namespace B1
    {
        class Program
        {
            static void Main(string[] args)
            {
                double n = double.Parse(Console.ReadLine());
                double a;
                a = Math.Sqrt(n);
                if(n < 0) Console.WriteLine("NO");
                else
                {
                    if (a * a == n) Console.WriteLine("YES");
                    else Console.WriteLine("NO");
                }
    
                Console.ReadLine();
            }
        }
    }
    

    • 0
      PalAgi  đã bình luận lúc 21, Tháng 12, 2025, 9:59

      À mình làm được r ạ

      using System;
      namespace B1
      {
          class Program
          {
              static void Main(string[] args)
              {
                  long n = long.Parse(Console.ReadLine());
                  long a;
                  a = (long)Math.Sqrt(n);
                  if(n < 0) Console.WriteLine("NO");
                  else
                  {
                      if (a * a == n) Console.WriteLine("YES");
                      else Console.WriteLine("NO");
                  }
      
                  Console.ReadLine();
              }
          }
      }
      

  • 3
    Duong_Thanh_Khiem_L8  đã bình luận lúc 24, Tháng 11, 2025, 15:55

    FULL AC:

    #include <iostream>
    #include <cmath>
    using namespace std;
    long long n, a;
    int main(){
        cin >> n;
        a = sqrt(n);
        if (a * a == n){
            cout << "YES";
        }
        else {
            cout << "NO";
        }
        return 0;
    }
    

  • 0
    nlkchan007  đã bình luận lúc 24, Tháng 10, 2025, 13:25

    test 4 là n=0 nha


  • 0
    YomYom  đã bình luận lúc 18, Tháng 10, 2025, 8:09

    include <bits/stdc++.h>

    using namespace std; long long a,b; int main() { cin >> a; b=sqrt(a); if(b*b==a) cout << "YES"; else cout << "NO"; return 0; }


  • 0
    YomYom  đã bình luận lúc 18, Tháng 10, 2025, 7:36

    ne cac chau

    include <bits/stdc++.h>

    using namespace std; long long a,b; int main() { cin >> a; b=sqrt(a); if(b*b==a) cout << "YES"; else cout << "NO"; return 0; }


  • 0
    YomYom  đã bình luận lúc 18, Tháng 10, 2025, 7:36

    include <bits/stdc++.h>

    using namespace std; long long a,b; int main() { cin >> a; b=sqrt(a); if(b*b==a) cout << "YES"; else cout << "NO"; return 0; }


  • -2
    khanhdau  đã bình luận lúc 26, Tháng 9, 2025, 14:22

    skibidi toilet


  • 0
    husky1235  đã bình luận lúc 21, Tháng 7, 2025, 9:50

    case 3 là gì vậy mn


    • 0
      B23DCDT038  đã bình luận lúc 11, Tháng 8, 2025, 15:02

      tôi làm thì test case 3 là hình như số vượt quá int, tôi sửa int thành long long là ac


  • 2
    haund4  đã bình luận lúc 20, Tháng 7, 2025, 17:01

    Bài này nên sửa lại giới hạn ràng buộc của n. Vì đã cho n là số tự nhiên rồi, nên điều kiện 0 <= n <= 1e12 sẽ phù hợp hơn.


  • -1
    quocchill2011  đã bình luận lúc 10, Tháng 8, 2025, 1:26

    Xin bạn đừng nói chuyện như thế


  • 0
    nguyenbaongan  đã bình luận lúc 21, Tháng 12, 2024, 11:04

    case 2 là gì v mng


    • 0
      mynameistmh1  đã bình luận lúc 5, Tháng 1, 2025, 12:38

      số âm nha


  • -4
    ndanh190215  đã bình luận lúc 4, Tháng 12, 2024, 9:03

    khó quá nghi khang ơi làm sao bây giờ?


  • 0
    tngnghi250315  đã bình luận lúc 4, Tháng 12, 2024, 8:57

    lam sai quai ha ce oi


  • 2
    wanghuyuwu  đã bình luận lúc 14, Tháng 11, 2024, 11:12 sửa 2

    :3 Kiểm tra sqrt(n) - int(sqrt(n)) == 0 là ra nè


    • 2
      kietjumper  đã bình luận lúc 19, Tháng 11, 2024, 15:50
      if(sqrt(n) - static_cast < long long > (sqrt(n)) == 0 ? cout<< "YES" : cout<< "NO");
      

  • 6
    kietjumper  đã bình luận lúc 14, Tháng 10, 2024, 16:03 chỉnh sửa

    Mình xin phép đc nêu thuật toán còn code mình comment ở dưới rồi nhé.

    B1: Cho người dùng nhập xuất ~n~ (~n~ để dạng long long tránh tràn số)

    B2: Tạo một biến ~k~ = ~sqrt(n)~ (~k~ để ở dạng long long vì ~n~ là long long thì có thể ~k~ cũng là long long)

    B3: Kiểm tra: if(~k~*~k~ == ~n~) thì ~n~ là số chính phương và ngược lại

    Note: (chú thích để mọi người hiểu rõ hơn về bước làm

    B3: Ban đầu, ta tạo biến ~k~ là lấy phần nguyên căn của ~n~

    Ví dụ: Căn bậc 2 của 8 = 2.82842712 lấy phần nguyên = 2. Kiểm tra: 2*2 không bằng 8 => 8 ko phải ~scp~

    Căn bậc 2 của 9 = 3 lấy phần nguyên = 3. Kiểm tra: 3*3 = 9 => 9 là số chính phương

    Từ đó ta đúc rút đc công thức kiểm tra số chính phương rồi nhé mọi người 😉


  • -11
    apt2_0227  đã bình luận lúc 19, Tháng 7, 2025, 0:31 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 2
      fanhumbled_34  đã bình luận lúc 31, Tháng 12, 2025, 12:10

      bớt nói láo đi


  • 0
    duongktrong123  đã bình luận lúc 2, Tháng 10, 2024, 2:40

    mọi ngươi xem em sai đâu với


    • 1
      kietjumper  đã bình luận lúc 3, Tháng 10, 2024, 13:04
      Ok em 👍
      

  • 2
    DoAnhKhoa  đã bình luận lúc 26, Tháng 6, 2025, 1:46

    lop cha m em


  • 4
    kietjumper  đã bình luận lúc 4, Tháng 10, 2024, 15:42 chỉnh sửa
    Vấn đề thứ nhất: Bài bạn làm sai cả test, vì yêu cầu n <= 10^12 mà để kiểu dữ liệu là int thì dẫn đến tràn số, cho nên bạn cần sửa lại tất cả thành long long
    
    Vấn đề thứ 2: Đề bài yêu cầu in ra "YES" và "NO" chứ ko phải "Yes" và "No" nên là cần sửa lại
    
    Sửa lại theo 2 vấn để trên thì bài mới AC nhé ^-^
    

  • 1
    minhkhoi25  đã bình luận lúc 13, Tháng 8, 2024, 10:56

    Ủa test 5 là gì vậy mọi người cho mình xin với ạ


    • 2
      kietjumper  đã bình luận lúc 4, Tháng 10, 2024, 15:43
      Bạn gửi bài làm đi mình sửa cho!
      

  • 5
    kietjumper  đã bình luận lúc 13, Tháng 8, 2024, 1:44

    MN nho them cho minh dau "#" vao trc include dau dong nhe!


    • 5
      kietjumper  đã bình luận lúc 13, Tháng 8, 2024, 1:45

      Roi nho copy vao thi xoa chu "copy" nhe! -_-


  • 1
    kietjumper  đã bình luận lúc 31, Tháng 7, 2024, 9:16

    Check cái phần (sqrt(n) * sqrt(n) == n) thì đừng làm thế này, dễ sai vì sqrt là kiểu double. Tạo một biến k: int k = sqrt(n) //Lúc này thì sqrt(n) là kiểu int vì ta ép kiểu biến. sau đó check: (k * k == n) cout<< "YES"; else cout<< "NO";

    Chúc mọi người làm bài tốt :))


  • 0
    Hwznggg  đã bình luận lúc 31, Tháng 5, 2024, 11:24

    cho em hỏi test case số 5 là gì với mọi người


  • 0
    BienLon8888  đã bình luận lúc 6, Tháng 1, 2024, 13:55

    Sao tôi lại bị sai test 3


    • 0
      nhuquynh  đã bình luận lúc 23, Tháng 1, 2024, 9:41

      chinh lai long long la duoc nha, ban dau minh cung sai nhu ban


  • 0
    Mechamaru  đã bình luận lúc 20, Tháng 12, 2023, 3:08

    gui code tap lam hao no ak hung


  • 0
    Konomi  đã bình luận lúc 22, Tháng 11, 2023, 21:53

    test 5 là j mọi người nhỉ


  • 3
    camapconnnnn  đã bình luận lúc 10, Tháng 11, 2023, 11:40

    ủa test 6 test j vậy mn sao dùng sqrt không ac test 6


  • 2
    taithikgirl  đã bình luận lúc 28, Tháng 10, 2023, 2:28

    hao no


  • 2
    taithikgirl  đã bình luận lúc 28, Tháng 10, 2023, 2:28

    hao no


  • 0
    hoangnghiahoa  đã bình luận lúc 26, Tháng 10, 2023, 16:07

    test 5 là gì vậy mọi người


  • 3
    tognoek  đã bình luận lúc 22, Tháng 8, 2023, 16:53

    hướng dẫn chỉ có c/c++ nên mình thêm tý bên python3 ạ: math.sqrt sẽ trả về float nên chúng ta sửa là int(math.sqrt()) nha, lỗi mình gặp mình chia sẻ ạ.


  • -4
    changnguyen  đã bình luận lúc 21, Tháng 8, 2023, 12:14

    nếu cho n = 2 thì chương trình vẫn chạy sai thôi bạn,thêm điều kiện nữa nếu n = 2 thì in ra YES nhé


    • 0
      hd929  đã bình luận lúc 31, Tháng 10, 2023, 10:43

      Hai có phải là số chính phương đâu?


  • 0
    bihy  đã bình luận lúc 10, Tháng 8, 2023, 15:18

    nên làm cho người nộp xem test nha, chứ cứ nnay khbt sai ở đâu mà sửa ý admin


  • 0
    vqlong  đã bình luận lúc 1, Tháng 8, 2023, 15:21

    làm cách nào cũng không được :(( cuối cùng mình dùng chính code trên trang này để gửi mà vẫn báo sai https://blog.luyencode.net/kiem-tra-so-chinh-phuong/


  • 0
    Thuznguyen  đã bình luận lúc 19, Tháng 8, 2023, 3:22

    mik sai ở test 3 thì sao bn :)))


    • 1
      codega  đã bình luận lúc 19, Tháng 8, 2023, 16:23

      kiểm tra code xem lưu về long long chưa nhé. giới hạn đến mũ 12 lưu int bị tràn số sai là phải


      • 0
        Thuznguyen  đã bình luận lúc 22, Tháng 8, 2023, 10:03

        thanh kiu nha mik bj tràn số thật :))


  • 5
    lek176234  đã bình luận lúc 8, Tháng 7, 2023, 17:15

    Giới hạn là 10^12 á bạn, bạn thử chỉnh đoạn đấy xem.