1 条题解

  • 0
    @ 2025-8-24 21:16:51

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:16:50,当前版本为作者最后更新于2024-12-14 13:20:23,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    欢迎报名洛谷网校,期待和大家一起进步!

    本题考查循环结构、循环嵌套以及常见的数学函数的使用。

    本题需要读入 tt 个正整数,因此使用循环结构进行读入每一个 aa。接下来问题在于如何找到正整数 bb 了。这里介绍两种做法:

    做法 1:枚举法。要问是否存在 bb,可以让 bb1,2,3,1,2,3,\dots 一直循环下去,直到发现了 b4=ab^4=a 或者发现不存在这个情况为止。什么情况下会不存在这个情况呢?随着 bb 的增大,b4b^4 不断增大,因此当 b4>ab^4>a 的时候,若还没有发现 b4=ab^4=a 的情况,就可以认为不存在 b4=ab^4=a 了。

    在编写代码中,可以使用 pow(b, 4) 表示 b4b^4,也可以简单地使用 b * b * b * b 编写。

    参考代码(部分):

    for (int b = 1; pow(b, 4) <= a; b++) {
        if (pow(b, 4) == a) {
            cout << b << endl;
            flag = true; //记录得到了一组解
        }
    }
    //若无解需要输出 -1
    

    做法 2:开根法。如果 bb 是一个整数,那么 b2b^2 也是一个整数,b4b^4 也是一个整数。因此 b4=b2\sqrt{b^4}=b^2b2=b\sqrt{b^2}=b 均为整数。

    从而想到:可以直接对 aa 开四次根号,将得到的结果保留整数部分记作 bb。如果计算发现 b4=ab^4=a,那么说明存在 bb,否则不存在。计算 aa 的四次根号,可以使用 sqrt(sqrt(a)),也可以使用 pow(a, 1.0 / 4)

    参考代码(部分):

    int b = sqrt(sqrt(a));
    if (pow(b, 4) == a)
        cout << b << endl;
    else
        cout << -1 << endl;
    
    • 1

    信息

    ID
    11087
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者