VL13 - Kiểm tra số hoàn hảo

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, Python, Ruby, Rust, Scratch, Swift

Số hoàn hảo (số hoàn thiện) là một số nguyên dương mà tổng các ước nguyên dương của nó (không bao gồm ước lớn nhất) bằng chính nó.

Ví dụ:

~ 6 = 1 + 2 + 3 ~ là một số hoàn hảo.

Nhiệm vụ của bạn là viết chương trình kiểm tra 1 số nguyên nhập từ bàn phím có phải số hoàn hảo hay không!

Input

  • Số nguyên ~n~ cần kiểm tra

Giới hạn

  • ~|n| \le 10^9~

Output

  • In ra YES nếu ~n~ là số hoàn hảo
  • In ra NO nếu ~n~ không phải số hoàn hảo

Sample

Input #1
6
Output #1
YES

Bình luận

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



  • -1
    holecuong  đã bình luận lúc 6, Tháng 3, 2024, 21:44

    nguyên nhân gì xin các bạn chia sẽ giúp mình với


  • -1
    holecuong  đã bình luận lúc 6, Tháng 3, 2024, 21:42

    include <iostream>

    using namespace std; bool shh(int a) { int sum =0; for (int i=1; i<=a/2;i++) if (a%i ==0)sum+=i; if (sum==a)return 1; else return 0; } int main() { int n; cin>>n; if (shh(n))cout<<n<<"yes"; else cout<<n<<"no"; return 0; } Sao mình thử chương trình trong máy tính thì cho được kết quả đúng mà gửi bài chấm thì không đúng được test nào


  • 0
    dtdungvnt  đã bình luận lúc 1, Tháng 3, 2024, 14:03

    n = int(input())

    if n <= 1: print("NO") else: sum = 0 i = 1 while i*i <= n: if n % i == 0: sum += i j = n // i if (j != i) and (j != n): sum += j

        i += 1
    if n == sum:
        print("YES")
    else:
        print("NO")
    

  • 0
    hailuacx  đã bình luận lúc 12, Tháng 1, 2024, 16:27

    include <bits/stdc++.h>

    using namespace std;

    int main() { int n; cin >> n; if (n<=1) { cout << "NO"; } else { int sum = 1; for (int i = 2; i <= n/2; i++){ if(n % i == 0){ sum += i; } } if (sum == n){ cout << "YES"; } else { cout << "NO"; } } return 0; } Full test


  • 0
    DKN13  đã bình luận lúc 11, Tháng 1, 2024, 2:56

    x = int(input()) sum = 0; for i in range(1,x): if x%i==0: sum+=i if sum==x: print("YES") else: print("NO")


  • -2
    hh_long  đã bình luận lúc 8, Tháng 1, 2024, 14:43

    include <bits/stdc++.h>

    define ll long long

    using namespace std; int main() { iosbase::syncwith_stdio(false); cin.tie(0);cout.tie(0); //freopen("","r",stdin); //freopen("","w",stdout); ll n; cin>>n; ll t=1; for(ll i=2;ii<=n;i++) if(n%i==0) { t+=(i+n/i); if(ii==n) t-=i; } if(t==n) cout<<"YES"; else cout<<"NO"; } o code e sai cho nao nhi?


    • 0
      hailuacx  đã bình luận lúc 12, Tháng 1, 2024, 16:29

      Sai ở vòng for. for(ll i=2;i<=n;i++) là bạn lấy cả ước n luôn rồi.


  • -2
    VoPhatDat  đã bình luận lúc 20, Tháng 12, 2023, 13:11

    n = int(input()) Sum = 0 if (n <= 0): print("NO") else: i = n while (i != 1): if (n % i == 0): Sum+=i i-=1; if (Sum+1-n==n): print("YES") else: print("NO")


  • -1
    khnguyen21th06  đã bình luận lúc 3, Tháng 12, 2023, 14:56

    ai code bài này AC bằng c++ cho mình xin code với, cứ bị TLE quài á


  • -1
    quangdoan__  đã bình luận lúc 27, Tháng 11, 2023, 9:48

    include<bits/stdc++.h>

    using namespace std; long long tonguoc(int n){ long long s=0; int i; for( i=1;ii<n;i++) if(n%i==0)s=s+i+n/i; if(ii==n)s=s+i; return s; } int main(){ iosbase::syncwith_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; if(2*n==tonguoc(n))cout<<"YES"; else cout<<"NO"; return 0; }


  • -2
    TADZCO102  đã bình luận lúc 24, Tháng 11, 2023, 1:55

    có thuật toán O(1)


    • -2
      TQThong2k11  đã bình luận lúc 14, Tháng 12, 2023, 1:55

      từ 1 đến 10^9 có 5, 6 số hoàn hảo


  • -3
    nguien_24  đã bình luận lúc 22, Tháng 10, 2023, 10:08 chỉnh sửa

    include <stdio.h>

    #include <math.h>
    long long int mu(int a,int b){
       int x=1;
       for (int i=1;i<=b;i++){
        x = x*a;
       }
       return x;
    }
    int shh(int n){
        for (int i=2; i<=10;i++){
            if (n ==mu(2,i-1)*(mu(2,i)-1)) return 1;
        }
        return 0;
    }
    int main(){
        int n;
        scanf("%d",&n);
        if (shh(n) ==0) printf("NO");
        else printf("YES");
    }
    

  • -2
    phongnguyen19811  đã bình luận lúc 15, Tháng 10, 2023, 6:46

    uses crt; var n,i,s:longint; begin readln(n); for i:=1 to n-1 do if n mod i=0 then s:=s+i; if n=s then write('YES') else write('NO'); readln; end.


  • -2
    ngkhacbaolam2809  đã bình luận lúc 2, Tháng 9, 2023, 2:30

    include <bits/stdc++.h>

    using namespace std;

    bool check(int);

    int main() {

    int n;
    
    cin >> n;
    if( check( n ) )
    {
        cout << "YES";
    }
    else
    {
        cout << "NO";
    }
    return 0;
    

    }

    bool check(int n)

    {

    int sum = 0;
    
    for(int i=1;i<=n/2;i++)
        {
        if(n%i==0) 
            sum+=i;
    }
    if(sum==n)
             return true; 
    
    return false;
    

    }


    • -3
      ngochagiang2003  đã bình luận lúc 20, Tháng 10, 2023, 7:41

      Bạn nên thêm #include<iostream> trc câu using.. để tránh sai


      • -2
        hieuthuba1907  đã bình luận lúc 27, Tháng 12, 2023, 7:27

        <bits/stdc++.h> là thư viện chuẩn có chứa cả <iostream> rồi bn nhé!


  • -3
    HuyTagama  đã bình luận lúc 1, Tháng 9, 2023, 14:04

    Bài này các bạn check nếu n <= 1 thì in ra No, còn lại kiểm tra bình thường, test 5 là test số âm mà yêu cầu đề, số hh là số nguyên dương


  • -7
    krenja102  đã bình luận lúc 14, Tháng 8, 2023, 14:36

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


  • -2
    Iamnotsmart  đã bình luận lúc 11, Tháng 8, 2023, 13:23

    Test 5 là số âm nên mấy bn ko cần làm check số hoàn hảo cho số âm nhé


    • -1
      tungkq123  đã bình luận lúc 28, Tháng 11, 2023, 9:08

      đọc đề nhầm tý là out luôn =))


  • -2
    thiennguyen  đã bình luận lúc 25, Tháng 7, 2023, 6:35

    Ai làm bên python cho mình biết test 5 là gì đc ko vậy?


  • -1
    Yorickur  đã bình luận lúc 22, Tháng 7, 2023, 16:12

    dạ cho mình hỏi code mình sai chỗ nào vậy ạ, mình bị sai ngay test case đầu tiên luôn bool hoanthien(int n) { int temp = 1; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { temp += i; if (i != n / i) { temp += n / i; } } } return temp == n; }


    • 1
      lch101  đã bình luận lúc 22, Tháng 7, 2023, 19:43

      Thứ nhất: tại i = 1. thì temp += 1 && tmp += n như này đã vi phạm đoạn tính ước là chính nó. Thứ 2: Bạn thiếu case n = 1 thì nó không phải là số hoàn hảo nhé vì shh không bao gồm ước là chính nó.


  • 0
    yoonicornsyndrome  đã bình luận lúc 12, Tháng 7, 2023, 19:37

    cho em hỏi test case 5 là gì v ạ?


    • -1
      hoangnguyenn268  đã bình luận lúc 14, Tháng 7, 2023, 5:42

      Mình nghĩ là liên quan kiểu dữ liệu ấy. Y/c 10^9 lận