Lũy thừa

Xem dạng PDF

Gửi bài giải


Điểm: 0,17 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Nguồn bài:
NUS ACM Training
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho ~l~, ~r~ sao cho ~2 \leq l \leq r \leq 10^{12}~. Tìm số ~k~ nguyên dương lớn nhất sao cho tồn tại số nguyên dương ~x~ để ~l \leq x^k \leq r~.

Input

Dòng đầu tiên là số lượng test.

Mỗi dòng tiếp theo chứa hai số nguyên ~l, r~ biểu thị một test.

Output

Đối với mỗi test in ra "Case #" ~+~ số hiệu test ~+~ ": " ~+~ số ~k~ lớn nhất tìm được.

Sample Input

4
5 20
10 12
2 100
1000000000000 1000000000000

Sample Output

Case #1: 4
Case #2: 1
Case #3: 6
Case #4: 12

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -1
    HoangNguyen2010  đã bình luận lúc 8, Tháng 12, 2025, 13:46

    chặt lồng


    • -1
      HoangNguyen2010  đã bình luận lúc 8, Tháng 12, 2025, 13:46

      chặt lần 1 là số mũ


    • -1
      HoangNguyen2010  đã bình luận lúc 8, Tháng 12, 2025, 13:46

      chặt lần 1 là số mũ


  • -1
    vominhmanh10  đã bình luận lúc 12, Tháng 10, 2025, 10:41

    với cơ số nhỏ nhất là 2 và giới hạn 1e12 thì k chỉ ở khoảng 60 trở xuống là cùng, ta duyệt k ngược cùng tìm kiếm nhị phân cơ số x sao cho x^k <= r rồi mới xét >= l cái đầu tiên thỏa cả hai chính là đáp án

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    ll n, r, l, t = 1;
    ll check(ll mid, ll k) {
        ll res = 1;
        while (k--) {
            res *= mid;
            if (res > 1e12) return 0;
        }
        if (res <= r) return res;
        return 0;
    } 
    int main() {
        ios::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        cin >> n;
        while (cin >> l >> r) {
            for (ll k = 64; k >= 1; k--) {
                ll lo = 2, hi = 1e12;
                ll res = 0;
                while (lo < hi) {
                    ll mid = (lo + hi + 1) / 2;
                    res = check(mid, k);
                    if (res > 0) lo = mid;
                    else hi = mid - 1;
                }
                if (check(lo, k) >= l) {
                    cout << "Case #" << t << ": " << k << "\n";
                    t++;
                    break;
                }
            }
        }
    }
    

  • -5
    nguyenmanhhung18092012  đã bình luận lúc 4, Tháng 8, 2025, 1:30

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -5
    nguyenmanhhung18092012  đã bình luận lúc 4, Tháng 8, 2025, 1:28

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -3
    ducbaothan  đã bình luận lúc 23, Tháng 7, 2025, 12:36 chỉnh sửa

    .


  • -9
    tienguyen3541  đã bình luận lúc 26, Tháng 2, 2025, 14:23

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    minhtrivy09  đã bình luận lúc 7, Tháng 8, 2024, 14:28

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -6
      thaoq8861  đã bình luận lúc 7, Tháng 9, 2024, 2:25

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    huy_lovely  đã bình luận lúc 18, Tháng 2, 2024, 10:31

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 2
      An212  đã bình luận lúc 13, Tháng 3, 2024, 15:00

      l,r>=2 mà


  • 0
    baolam01662052827  đã bình luận lúc 11, Tháng 7, 2023, 18:06

    Bài này có thể không cần giải bằng tìm kiếm nhị phân


  • -148
    hbphuc2009  đã bình luận lúc 12, Tháng 7, 2022, 1:05 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 16
    FuzZefer  đã bình luận lúc 1, Tháng 9, 2021, 15:37

    Câu này giới hạn test là bao nhiêu vậy ạ


    • 26
      leduykhongngu  đã bình luận lúc 30, Tháng 9, 2021, 15:40

      5000 test bạn nhé