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

첫 번째 N 자연은 C++에서 주어진 차와 공소합을 가진 두 개의 집합으로 나눌 수 있습니다.

<시간/>

이 튜토리얼에서는 1부터 n까지의 자연수가 두 개의 반으로 나뉘는지 여부를 찾아야 합니다. 다음 조건을 만족해야 합니다.

  • 두 시리즈 합계의 절대 차이는 m이어야 합니다.

  • 그리고 두 합의 GCD는 1이어야 합니다. 즉, 공소수입니다.

처음 n개의 자연수의 합은 (n*(n+1))/2입니다. 총합과 차 m이 있으므로 sumOne과 sumTwo를 찾을 수 있습니다. 아래 방정식을 참조하십시오.

sumOne + sumTwo = (n*(n+1))/2
sumOne - sumTwo = m

예시

절대 합이 m과 같은지 확인하십시오. 그런 다음 GCD를 확인합니다.

#include <bits/stdc++.h>
using namespace std;
bool canSplitIntoTwoHalves(int n, int m) {
   int total_sum = (n * (n + 1)) / 2;
   int sumOne = (total_sum + m) / 2;
   int sumTwo = total_sum - sumOne;
   if (total_sum < m) {
      return false;
   }
   if (sumOne + sumTwo == total_sum &&sumOne - sumTwo == m) {
      return (__gcd(sumOne, sumTwo) == 1);
   }
   return false;
}
int main() {
   int n = 10, m = 17;
   if (canSplitIntoTwoHalves(n, m)) {
      cout << "Can split";
   }
   else {
      cout << "Can't split";
   }
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Can split

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.