Computer >> Máy Tính >  >> Lập trình >> lập trình C

Số siêu hoàn hảo trong lập trình C

Khái niệm về số siêu hoàn hảo cũng tương tự như số hoàn hảo. Nó được tìm thấy bởi D Suryanarayana vào năm 1969. Ông đã khái quát số siêu hoàn hảo là một số thỏa mãn công thức sau:

sig(sig(n)) = 2n

Ở đây, sig (n) là hàm tính tổng các ước số của một số, nó còn được gọi là hàm tổng hợp số chia.

Ví dụ sau giúp bạn hiểu rõ khái niệm này:

chúng ta cần kiểm tra xem số N có phải là số siêu hoàn hảo hay không:

N = 16

Đầu ra

yes

Giải thích - để kiểm tra xem một số có phải là số hoàn hảo hay không, chúng ta sẽ tìm tổng các ước của nó.

sig(16) = 1 + 2 + 4 + 8 + 16 = 31 ( divisors of 16 are 1, 2, 4, 8, 16 1, 2, 4, 8, 16)
sig( 31) = 1 + 31 = 32( 31 is a prime number)
2*n = 32 = sig(sig(n))

Điều này cho thấy 16 là một con số siêu hoàn hảo.

Bây giờ chúng ta hãy xem một ví dụ về một số không phải là một số siêu hoàn hảo.

n = 6
sig(6) = 1 + 2 + 3 + 6= 12
sig(12) = 1 + 2 + 3 + 4 +6 + 12 = 28
6*2 = 12 != 28.

Điều này cho thấy 6 không phải là một con số siêu hoàn hảo

Ví dụ

#include<stdio.h>
//function to find the sum of divisors of num
int divisorsum(int n){
   int sum = 0; // intialising the sum
   for (int i=1; i*i <= n; ++i){
      if (n%i == 0) { // find the sum of divisors
         if (i == (n/i))
            sum += i;
         else
            sum += (i + n/i);
      }
   }
   return sum;
}
int main() {
   int n = 16;
   int n1 = divisorsum(n);
   if(2*n == divisorsum(n1)){
      printf("The number %d is a superperfect number", n);
   } else{
      printf("The number %d is not a superperfect number", n);
   }
   return 0;
}

Đầu ra

The number 16 is a super perfect number