이 섹션에서는 하나의 수를 두 개의 삼각형 수의 합으로 표현할 수 있는지 여부를 알아보겠습니다. 삼각수는 아래와 같습니다 -
이 예에서 1, 3, 6, 10이 일부 삼각형 숫자임을 알 수 있습니다. 숫자 N(예:16)을 두 개의 삼각형 숫자(6, 10)의 합으로 표현해야 합니다.
접근 방식은 매우 간단합니다. N보다 작은 모든 삼각수를 가져와야 합니다. 이 값으로 집합을 만드세요. 이제 집합에서 X라는 숫자를 가져와서 N – X가 집합에 존재하는지 확인해야 합니다. 그러면 X는 두 개의 삼각형 숫자의 합으로 표시될 수 있습니다.
예시
#include <iostream> #include <set> using namespace std; bool isSumTriangularNum(int n) { set<int> s; int i = 1; while (1) { //find and store all triangular numbers below n, and store into set int x = i * (i + 1) / 2; if (x >= n) break; s.insert(x); i++; } for (auto x : s) if (s.find(n - x) != s.end()) return true; return false; } int main() { int num = 16; if(isSumTriangularNum(num)){ cout << "Can be represented"; }else{ cout << "Cannot be represented"; } }
출력
Can be represented