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

แนวทางในการแก้ปัญหานี้

แนวทางเดรัจฉานในการแก้ปัญหานี้คือเราจะทำการวนซ้ำสองลูปและวนซ้ำจนถึงขีด จำกัด จากนั้นเราจะหาผลรวมของตัวเลขสองตัวสำหรับเลขชี้กำลังแต่ละตัวในขอบเขตบนและใส่ตัวเลขที่เป็นผลลัพธ์ลงในรายการ

  • ใช้สามตัวเลข 'a', 'b' และ 'limit'
  • ฟังก์ชันที่มีประสิทธิภาพจำนวน (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]