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

X 또는 Y로 나누어 떨어지는 처음 N개의 자연수의 합

<시간/>

X 또는 Y로 나누어 떨어지는 n까지의 모든 자연수를 더하는 것은 X 또는 Y로 나누어 떨어지는 모든 수를 선택하여 합을 저장하는 변수에 더하는 것입니다.

X 또는 Y로 나누어떨어지는 처음 N개의 자연수의 합을 구하는 방법은 두 가지가 있습니다 -

  • 루프 및 조건문 사용
  • 공식 사용

방법 1 - 루프 및 조건문 사용

이 방법은 최대 n개의 숫자를 세고 X 또는 Y로 나누어 떨어지는 숫자를 선택하고 추가하고 각 반복에서 변수에 저장하는 루프를 사용합니다.

예시 코드

#include <stdio.h>
int main(void) {
   int n = 54;
   int x = 2 ;
   int y = 5;
   int sum = 0;
   for(int i = 0; i<= n; i++) {
      if(i%x == 0 || i% y == 0)
         sum = sum + i;
   }
   printf("sum of %d natural numbers divisible by %d and %d is %d" ,n,x,y,sum);
   return 0;
}

출력

sum of 54 natural numbers divisible by 2 and 5 is 881

방법 2 - 공식 사용,

이 방법은 수식을 사용하여 숫자로 나눌 수 있는 처음 n개의 숫자의 합을 찾습니다.

이것은 공식을 사용하여 찾을 수 있습니다. - SN/X =((N/X)/2) * (2 * X + (N/X - 1) * X)

이 공식을 사용하여 x로 나눌 수 있는 n개의 자연수의 합을 구합니다. - S n/x =((n/x)/2) * (2 * x + (n/x - 1) * x)

이 공식을 사용하여 y로 나눌 수 있는 n개의 자연수의 합을 구합니다. - S n/y =((n/y)/2) * (2 * y + (n/y - 1) * y)

이제 이 공식을 사용하여 x와 y로 나눌 수 있는 n개의 자연수의 합을 구합니다. S n/x*y =((n/(x*y)/2) * (2 * (x*y) + (n/(x*y) - 1) * (x*y))

이제 x의 합과 y의 합을 더하고 두 번 더한 x*y의 합을 뺍니다.

예시 코드

#include <stdio.h>
int main() {
   int n = 54;
   int x = 2, y = 5;
   int Sx, Sy, Sxy, sum;
   Sx = ((n / x)) * (2 * x + (n / x - 1) * x) / 2;
   Sy = ((n / y)) * (2 * y + (n / y - 1) * y) / 2;
   Sxy= ((n / (x * y))) * (2 * (x * y) + (n / (x * y) - 1) * (x * y))/ 2;
   sum = Sx + Sy - Sxy;
   printf("sum of %d natural numbers divisible by %d and %d is %d" ,n,x,y,sum);
   return 0;
}

출력

sum of 54 natural numbers divisible by 2 and 5 is 881

두 번째 방법은 더 나은 시간 복잡도를 의미하는 루프를 사용하지 않기 때문에 더 좋습니다. 그러나 입력 케이스가 첫 번째 케이스보다 작은 경우에도 사용할 수 있습니다. 그러나 대규모 입력의 경우 두 번째 방법이 최선의 선택이 아닙니다.