이 문제에서는 숫자가 주어집니다. 우리의 임무는 주어진 숫자가 처음 n개의 자연수의 합인지 찾는 것입니다.
문제 설명: 여기서 주어진 숫자가 처음 n개의 자연수의 합인지 확인해야 합니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
입력: 숫자 =55
출력: 예, 10
설명:
55는 처음 10개의 자연수 1+2+3+4+5+6+7+8+9+10의 합입니다.
해결 방법:
문제를 푸는 간단한 방법은 n개의 자연수의 합이 num보다 크거나 같을 때까지 찾는 것입니다.
합계가 num과 같으면 n을 반환합니다.
n의 값에서 합계가 n보다 커지면 -1을 반환합니다.
우리 솔루션의 작동을 설명하는 프로그램,
예시
#include <iostream> using namespace std; int isNatSum(int num){ int sum = 0; for (int n = 1; sum < num; n++) { sum += n; if (sum == num) return n; } return -1; } int main(){ int num = 55; int n = isNatSum(num); if(n == -1) cout<<"The value is not sum of natural numbers"; else cout<<"The value is a sum of first "<<n<<" natural numbers"; return 0; }
출력 -
The value is a sum of first 10 natural numbers
이 방법도 좋지만 n개의 자연수의 합에 대한 수학 공식을 사용하면 문제를 보다 효율적으로 해결할 수 있습니다.
첫 번째 상호 수의 합은 다음 공식으로 제공됩니다.
합계 =n*(n+1)/ 2
합계가 주어지고 n의 값을 찾아야 합니다.
따라서 n을 찾기 위해 이차 방정식을 만들어야 합니다.
=> 2*합계 =n 2 + n
=> n 2 + n - 2*sum =0 , 이차 방정식
이 2차 방정식의 해는 다음과 같습니다.
우리 솔루션의 작동을 설명하는 프로그램,
예시
#include <iostream> #include <math.h> using namespace std; int isNatSum(int num){ int n = ( -1+ sqrt (1 + (8*num) ))/2; if(ceil(n)==floor(n)){ return n; } return -1; } int main(){ int num = 55; int n = isNatSum(num); if(n == -1) cout<<"The value is not sum of natural numbers"; else cout<<"The value is a sum of first "<<n<<" natural numbers"; return 0; }
출력
The value is a sum of first 10 natural numbers