> 백엔드 개발 > C++ > 방정식 x = b*(sumofdigits(x) ^ a)+c에 대한 정수 해의 수

방정식 x = b*(sumofdigits(x) ^ a)+c에 대한 정수 해의 수

PHPz
풀어 주다: 2023-09-08 18:01:04
앞으로
1025명이 탐색했습니다.

方程 x = b*(sumofdigits(x) ^ a)+c 的整数解的数量

세 개의 정수 a, b, c가 있고 방정식 x = b* (sumofdigits(x)^a) +c가 있다고 가정합니다. 여기서 sumofdigits(x ) 는 x에 있는 모든 숫자의 합입니다. 방정식을 만족하는 가능한 모든 적분 해를 찾기 위해 C++의 다양한 방법을 살펴보겠습니다.

입력 및 출력 시나리오

아래에는 a, b, c의 값이 나와 있습니다. 방정식 x = b* (sumofdigits(x)^a) +c를 만족하는 다양한 적분 해가 출력값으로 제공됩니다.

으아아아

위의 경우 a의 값은 2, b의 값은 2, c의 값은 -3이며, x의 가능한 값은 125, 447, 575입니다.

숫자 125를 생각해 보세요. 숫자의 합은 8입니다. 이 값을 방정식 b*(sum(x)^a) +c에 대입하면 답은 125이며 이는 x와 같습니다. 따라서 Eq.에 대한 가능한 솔루션입니다.

참고- 이 방정식의 적분 해는 1~109 범위에 있습니다.

재귀 사용

재귀 검색을 사용하여 주어진 방정식의 적분 해를 찾을 수 있습니다.

주어진 숫자 N의 자릿수 합계를 계산하는 sumOfDigits()라는 함수를 만들어야 합니다.

  • 모듈로 및 나누기 연산자를 사용하여 N 숫자를 반복합니다.

  • 모듈로 연산자는 N의 마지막 숫자를 추출하는 데 사용됩니다.

  • 각 반복 후에 변수 sum에 저장된 숫자를 하나씩 추가합니다.

적분 해를 계산하기 위해integralSolutions() 함수를 만듭니다.

  • sumOfDigits 함수를 사용하여 x의 자릿수 합계를 계산합니다.

  • 다음으로 for 루프를 사용하여 합을 a의 거듭제곱으로 올립니다.

  • 우리는 bpower를 곱하고 c를 더하여 방정식의 우변을 평가합니다.

  • x의 값이 우변의 값과 같으면 정수해로 간주됩니다.

다음으로, 지정된 범위 내에서 적분해를 검색하는 재귀 함수가 있습니다.

으아아아

출력

으아아아

Segmentation Fault 재귀 검색에서 지정된 범위의 끝 값이 100000을 초과하면 이 오류가 발생합니다. 따라서 그 이상의 x 값을 가질 수 없습니다.

간단한 반복 사용

100000보다 큰 x에 대한 정수 솔루션을 원하는 경우 재귀를 사용하지 않습니다. 여기서는 1부터 109까지 x의 간단한 반복을 사용하고 이를 방정식 오른쪽의 값과 비교할 것입니다.

으아아아

출력

으아아아

결론

우리는 재귀 또는 단순 반복을 사용하여 방정식 x = b* (sumofdigits(x)^a) +c의 적분 해를 찾는 방법을 모색했습니다. 재귀적 방법을 사용하면 솔루션 범위를 유연하게 지정할 수 있습니다. 그러나 시간 복잡성이 증가하고 더 넓은 범위의 값에 대해 분할 오류가 표시되어 스택 오버플로가 발생할 수 있습니다.

반복 방법은 시간 복잡도와 메모리 사용량 측면에서 효율적입니다. 그러나 유연성이 제한적이고 코드가 더 복잡합니다. 따라서 두 방법 모두 장점과 단점이 있습니다. 필요에 따라 원하는 방법을 선택할 수 있습니다.

위 내용은 방정식 x = b*(sumofdigits(x) ^ a)+c에 대한 정수 해의 수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿