세 개의 정수 'a'와 'b'와 'limit'가 있다고 가정해 보겠습니다. 작업은 [a, limit] 범위의 숫자를 인쇄하는 것입니다. 이 숫자의 목록은 강력한 정수라고 하며 다음과 같이 표시됩니다.
a^i + b^j i>=0 및 j>=0
예를 들어
입력-1:
a = 2
b = 5
limit = 10
출력:
[2, 3, 4, 5, 6, 7, 9]
설명: 각 i 및 j에 대해
2^0 + 5^0 =2 , 2^0 + 5^1=6
2^1 + 5^0 =3 , 2^1 + 5^1=7
2^2 + 5^0 =5 , 2^3 + 5^0=9
이 문제를 해결하기 위한 접근 방식
이 특정 문제를 해결하기 위한 무차별 대입 방식은 두 개의 중첩 루프를 사용하여 한계까지 반복하는 것입니다. 그런 다음 상한에서 각 지수에 대한 두 숫자의 합을 찾고 결과 숫자를 목록에 삽입합니다.
- 3개의 숫자 'a', 'b' 및 'limit'를 사용합니다.
- Powerfulnumbers(int a, int b, int limit) 함수는 숫자 'a' , 'b' 및 'limit'를 입력으로 사용합니다. 이 함수는 a^i + b^j(여기서 i>=0 및 j>=0)와 같은 모든 강력한 숫자의 목록을 반환합니다.
- 한도까지 두 개의 중첩 루프를 수행하고 매번 인덱스를 곱하여 강력한 숫자를 찾습니다.
- 숫자가 범위 [a, limit] 사이에 있으면 숫자를 세트로 저장하십시오(숫자의 중복을 피하기 위해).
- 세트를 반복하고 출력을 인쇄합니다.
예시
#include <bits/stdc++.h> using namespace std; void powerfulNum(int a, int b, int limit) { set < int > s; for (int i = 1; i < limit; i *= a) { for (int j = 1; j < limit; j *= b) { if (i + j <= limit) { s.insert(i + j); } else break; if (b == 1) break; } if (a == 1) break; } for (auto it: s) { cout << it << " "; } } int main() { int a = 2; int b = 5; int limit = 10; powerfulNum(a, b, limit); return 0; }
위의 코드를 실행하면 출력이 다음과 같이 생성됩니다.
출력
2 3 5 6 7 9
여기에서 2에서 10 사이의 모든 강력한 숫자는 [2, 3, 4, 6, 7, 9]입니다.