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