Cho x, y. Kiểm tra y có phải là lũy thừa của x không (y = xᵏ, k ≥ 1 nguyên).
Thuật toán
- Trường hợp đặc biệt: x=1 → chỉ y=1 mới đúng.
- Nhân dồn
pow = 1, x, x², x³...cho đến khipow ≥ y. - Kiểm tra
pow == y.
Chương trình C++
#include <bits/stdc++.h>
using namespace std;
bool isPowerOf(int x, long long y) {
if (x == 1) return y == 1;
if (y == 1) return true; // x^0 = 1
if (y < 1) return false;
long long pow = 1;
while (pow < y) {
if (pow > LLONG_MAX / x) return false; // overflow check
pow *= x;
}
return pow == y;
}
int main() {
vector> tests = {{5,125}, {2,16}, {3,27}, {10,1000}, {5,124}, {1,1}, {1,5}};
for (auto [x,y] : tests)
cout << y << " la luy thua cua " << x << "? " << (isPowerOf(x,y)?"Co":"Khong") << "\n";
return 0;
}
Kết quả
125 la luy thua cua 5? Co 16 la luy thua cua 2? Co 27 la luy thua cua 3? Co 1000 la luy thua cua 10? Co 124 la luy thua cua 5? Khong 1 la luy thua cua 1? Co 5 la luy thua cua 1? Khong