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

처음 n개의 자연수로 구성된 집합의 모든 부분집합의 합

<시간/>

Set은 데이터 요소의 모음입니다. 집합의 부분집합은 부모 집합 뒤의 요소들로만 구성된 집합입니다. 예를 들어, B는 B의 모든 요소가 A에 있는 경우 A의 하위 집합입니다.

여기서 우리는 처음 n개의 자연수로 찾은 집합의 모든 부분집합의 합을 찾아야 합니다. 즉, 형성할 수 있는 모든 하위 집합을 찾은 다음 추가해야 합니다. 예를 들어 보겠습니다.

N =3

세트 ={1,2,3}

형성된 부분 집합 ={ {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3,} }

합계 =1+1+2+1+3+2+2+3+3+1+2+3 =24

합계를 다시 정렬합니다. 1+1+1+1+2+2+2+2+3+3+3 =4(1+2+3) =24

이 유형의 시리즈에 대한 수학 공식이 있으며 시리즈의 일반 공식은 2^n*(n^2 + n + 2) – 1입니다.

#include <stdio.h>
#define mod (int)(1e9 + 7)
int power(int x, int y) {
   int res = 1;
   x = x % mod;
   while (y > 0) {
      if (y & 1)
         res = (res * x) % mod;
         y = y >> 1;
         x = (x * x) % mod;
   }
   return res;
}
int main() {
   int n = 45;
   n--;
   int ans = n * n;
   if (ans >= mod)
      ans %= mod;
      ans += n + 2;
   if (ans >= mod)
      ans %= mod;
      ans = (power(2, n) % mod * ans % mod) % mod;
      ans = (ans - 1 + mod) % mod;
   printf("The sum of the series is %d \n", ans);
   return 0;
}

출력

The sim of the series is 2815