Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 거의 완벽한 숫자

<시간/>

거의 완벽한 숫자 최소 결함 숫자 또는 약간 결함이 있는 숫자라고도 하는 숫자는 모든 제수의 합(1과 숫자 자체를 더함)이 2n-1과 같아야 하는 숫자입니다. .

이 문제에서는 숫자가 거의 완벽한 숫자인지 확인하는 알고리즘을 정의합니다.

개념을 더 잘 이해하기 위해 예를 들어 보겠습니다.

Input : 16
Output : yes
Explanation :
Divisors of 16 are 1, 2, 4, 8, 16.
Sum = 1 + 2 + 4 + 8 + 16 = 31
n = 16 ; 2n-1 = 2*16 - 1 = 31

Input : 12
Output : No
Explanation :
Divisors of 12 are 1, 2, 3, 4, 6, 12.
Sum = 1+2+3+4+6+12 = 26
n = 12 ; 2n-1 = 2*12 - 1 = 23

이제 주어진 숫자가 거의 완벽한 숫자인지 확인하는 문제 or not은 거의 완벽한 숫자의 논리를 사용하여 해결됩니다. 즉, 숫자의 모든 약수의 합이 2n -1인 경우 .

알고리즘

Step 1 : Calculate the sum of all divisors of the number.
Step 2 : Calculate the value of val = 2n-1.
Step 3 : if sum == val -> print “YES”
Step 4 : else print “NO”

예시

#include <iostream>
using namespace std;
void almostPerfectNumber(int n) ;
int main(){
   int n = 16;
   cout<<"Is "<<n<<" an almost perfect number ?\n";
   almostPerfectNumber(n) ;
}
void almostPerfectNumber(int n){
   int divisors = 0;
   for (int i = 1; i <= n; i++) {
      if (n % i == 0)
         divisors += i;
   }
   if (divisors == 2 * n - 1)
      cout<<"YES";
   else
   cout<<"NO";
}

출력

Is 16 an almost perfect number ?
YES