Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểm tra số có phải lũy thừa của số khác C++


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 khi pow ≥ 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