1 条题解

  • 0
    @ 2025-8-24 22:58:00

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 2023gdgz01
    义忠仁

    搬运于2025-08-24 22:58:00,当前版本为作者最后更新于2024-05-15 20:56:44,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    提供一种非常优雅的方法。有一种数据类型为 __int128,它能存储最大为 212712^{127}-1 的整数,而本题 a×ba\times b 最大可能为 103610^{36},正好可以用 __int128 运算。__int128 并不能用 cinscanf 读入,也不能用 coutprintf 输出。但是输入数据不超过 101810^{18},所以我们可以先用 long long 类型读入 a,b,pa,b,p,再将其转换为 __int128 类型运算;注意到 pp 不超过 101810^{18},所以最终运算结果也不超过 1018110^{18}-1,我们可以把 __int128 类型的运算结果转换为 long long 再输出。由此省去了写快读或快输。代码如下:

    #include <cstdio>
    
    long long A, B, P, ANS;
    __int128 a, b, p, ans;
    
    int main() {
    	scanf("%lld%lld%lld", &A, &B, &P);
    	a = A;
    	b = B;
    	p = P;
    	ans = a * b % p;
    	ANS = ans;
    	printf("%lld", ANS);
    	return 0;
    }
    

    AC 链接

    • 1

    信息

    ID
    10152
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者