1 条题解

  • 0
    @ 2025-8-24 21:14:34

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Maxmilite
    **

    搬运于2025-08-24 21:14:33,当前版本为作者最后更新于2023-02-09 12:31:21,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    Source & Knowledge

    2023 年 2 月语言月赛,由洛谷网校入门计划/基础计划提供。

    文字题解

    题目大意

    给定一个整数 nn,帮助求出一组整数 x,y,zx, y, z,满足 xy÷z=n!x - y \div z = n!(xy)÷z=n(x - y) \div z = n

    解析

    本题考察分析问题的能力和对单重循环的运用。

    正如题目所言,直接输出 2×(n!n)2 \times (n! - n)2×(n!2n)2 \times (n! - 2n)22 即可通过本题。关于这组答案的合理性题目也已经给出,难点在于计算 n!n! 的部分。下面给出 n!=1×2××nn! = 1 \times 2 \times \cdots \times n 的计算方法。

    建立一个初值为 11 的变量 ansans 用于存储 n!n! 的结果。之后循环 1n1 \sim n 枚举变量,对 1n1 \sim n 中的每个整数 ii,将 ansans 赋值为 ans×ians \times i。这个过程使用 for 循环实现。

    for 循环的格式为:

    for (起始条件; 循环能够继续的条件; 循环完成后进行变量更新的语句) {
    	// ...
    }
    

    具体的控制流可以参考 https://www.runoob.com/cplusplus/cpp-for-loop.html,由于篇幅限制这里不再做过多的描述。

    最后的 ansans 即为 n!n! 的结果,正确性是显然的。由于计算过程中做的均为乘法运算,因此可以将 ansans 的初始值设置为 11

    核心代码:

    int ans = 1;
    for (int i = 1; i <= n; ++i) {
    	ans *= i;
    }
    

    特别的,当 n=0n = 0 时,循环部分不会进行,此时 ans=1ans = 1,也是符合要求的。

    最后输出 2×(ansn)2 \times (ans - n)2×(ans2n)2 \times (ans - 2n)22 即可。

    视频题解

    完整代码请在视频中查看。

    补充内容

    以下内容可能会用到一些初高中数学知识,完成本题不需要以下内容,可以选择性阅读。

    实际上初始题目并没有给出构造方案,后来受到了难度限制,因此给出了一组构造方案。

    下面来解析一下如何得出本题的构造方案。

    首先给出两条引理,用于对后面的构造方案进行解释。

    引理 1:对于一个满足条件的整数三元组 (x,y,z)(x, y, z),通过 zz 可以确定唯一的 x,yx, y 与之对应。

    证明:

    因为整数三元组 (x,y,z)(x, y, z) 满足上述条件,所以 (xyz)(xyz)=n!n(x - \dfrac yz) - (\dfrac{x - y}{z}) = n! - n,即 x×z1z=n!nx \times \dfrac{z - 1}{z} = n! - n

    x=(n!n)×zz1x = (n! - n) \times \dfrac{z}{z - 1}

    显然,接下来 y=z×(xn!)y = z \times (x - n!)

    证毕。

    引理 2:在 z2z \geq 2 的情况下,一个整数三元组 (x,y,z)(x, y, z) 满足上述条件的充要条件为 z1z - 1n!nn! - n 的因数。

    证明:

    由引理 1,当 z2z \geq 2 时,x=(n!n)×zz1x = (n! - n) \times \dfrac{z}{z - 1}y=z×(xn!)y = z \times (x - n!)。此时由于 n!n0n! - n \geq 0z>z11z > z - 1 \geq 1,那么我们就可以保证 x0x \geq 0。如果此时 x,yx, y 都是整数,那么这个整数三元组就符合题面要求的所有约束。

    考虑如何保证 x,yx, y 都是整数。不难发现如果 xx 是整数,yy 则一定是整数。因此考虑 xx 的问题。

    注意到导致 xx 不是整数的唯一因素是分母 z1z - 1。因此如果想让 xx 是整数,只要保证 (n!n)×z(n! - n) \times {z} 可以整除 z1z - 1 即可。

    gcd(z,z1)=1\gcd(z, z - 1) = 1(易证,如果 kkzzz1z - 1 的因数,那么 kk 就是 zz+1=1z - z + 1 = 1 的因数,所以 kk 只能是 11),所以如果 (n!n)×z(n! - n) \times {z} 可以整除 z1z - 1,则只可能为 z1z - 1(n!n)(n! - n) 的因数。

    对充分性,如果 z1z - 1(n!n)(n! - n) 的因数,那么 x=(n!n)×zz1x = (n! - n) \times \dfrac{z}{z - 1} 就是非负整数,yy 同样也是整数。且由引理 1,如果三元组合法,那么当 zz 确定时,对应的 x,yx, y 是唯一的。因此一个整数三元组 (x,y,z)(x, y, z) 可以满足上述条件。

    证毕。

    因此,我们只需要找到 (n!n)(n! - n) 的一个因数,将其 +1+ 1 后作为 zz,计算出 x=(n!n)×zz1x = (n! - n) \times \dfrac{z}{z - 1}y=z×(xn!)y = z \times (x - n!) 即可。由上面的引理,这样的解总是存在的。

    显然 11 一定是 (n!n)(n! - n) 的因数。所以可以令 z=1+1=2z =1 + 1 = 2,这时 x=(n!n)×2x = (n! - n) \times 2y=2×(n!2n)y = 2 \times (n! - 2n)。这也是题目中构造方案的来源。

    • 1

    信息

    ID
    8292
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者