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

C++의 강력한 정수

<시간/>

세 개의 정수 '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]입니다.