news 2026/6/7 19:46:16

信息学奥赛一本通 1640:C Looooops

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信息学奥赛一本通 1640:C Looooops

【题目链接】

ybt 1640:C Looooops
LOJ 10218. 「一本通 6.4 练习 4」C Looooops

【题目考点】

1. 线性同余方程

相关知识见 【模板】洛谷 P1082 [NOIP 2012 提高组] 同余方程

【解题思路】

在C或C++的k kk位存储系统,可以存储[ 0 , 2 k − 1 ] [0, 2^k-1][0,2k1]范围内的整数。如unsigned int类型的范围为[ 0 , 2 32 − 1 ] [0, 2^{32}-1][0,2321],unsigned long long类型的范围为[ 0 , 2 64 − 1 ] [0, 2^{64}-1][0,2641]
当变量的数值超出了该数据类型可以表示的范围,会发生“自然溢出”,变量在二进制下只会保留末k kk位,在数值角度看相当于进行了m o d 2 k \bmod 2^kmod2k操作。
for (variable = A; variable != B; variable += C)
该代码的意义为:变量初值为A,每次循环变量的值增加C,当变量的值等于B时跳出循环。
假设进行了x xx次循环,则有A + x C m o d 2 k = B A+xC \bmod 2^k = BA+xCmod2k=B
或列成同余方程A + x C ≡ B ( m o d 2 k ) A+xC\equiv B \pmod{2^k}A+xCB(mod2k)
整理得C x ≡ B − A ( m o d 2 k ) Cx\equiv B-A \pmod{2^k}CxBA(mod2k)

  • 如果g c d ( C , 2 k ) ∣ ( B − A ) gcd(C, 2^k)\mid (B-A)gcd(C,2k)(BA),则该方程有解,通过扩展欧几里得算法求线性同余方程的解。
    -如果g c d ( C , 2 k ) ∤ ( B − A ) gcd(C, 2^k)\nmid (B-A)gcd(C,2k)(BA),则该方程无解,即无论进行几次循环,变量的值都无法等于B BB,输出FOREVER。

【题解代码】

解法1:扩展欧几里得算法直接求解线性同余方程
#include<bits/stdc++.h>usingnamespacestd;#defineN25#defineMOD(a,b)(((a)%(b)+(b))%(b))typedeflonglongLL;voidexgcd(LL a,LL b,LL&x,LL&y,LL&g){if(b==0){x=1,y=0,g=a;return;}exgcd(b,a%b,y,x,g);y-=a/b*x;}intmain(){LL a,b,c,k,x,y,g;while(cin>>a>>b>>c>>k&&!(a==0&&b==0&&c==0&&k==0)){exgcd(c,1LL<<k,x,y,g);if((b-a)%g==0)cout<<MOD(x*(b-a)/g,(1LL<<k)/g)<<endl;elsecout<<"FOREVER"<<endl;}return0;}
解法2:先求乘法逆元再解线性同余方程
#include<bits/stdc++.h>usingnamespacestd;#defineN25#defineMOD(a,b)(((a)%(b)+(b))%(b))typedeflonglongLL;voidexgcd(LL a,LL b,LL&x,LL&y){if(b==0){x=1,y=0;return;}exgcd(b,a%b,y,x);y-=a/b*x;}LLgcd(LL a,LL b){if(b==0)returna;returngcd(b,a%b);}LLinv(LL a,LL m){LL x,y;exgcd(a,m,x,y);returnMOD(x,m);}intmain(){LL a,b,c,k,x,y,g;while(cin>>a>>b>>c>>k&&!(a==0&&b==0&&c==0&&k==0)){g=gcd(c,1LL<<k);if((b-a)%g==0)cout<<MOD((b-a)/g*inv(c,1LL<<k),(1LL<<k)/g)<<endl;elsecout<<"FOREVER"<<endl;}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 22:23:05

终极指南:3步解决Armbian音频配置难题

终极指南&#xff1a;3步解决Armbian音频配置难题 【免费下载链接】build Armbian Linux Build Framework 项目地址: https://gitcode.com/GitHub_Trending/bu/build 还在为单板计算机上的声音问题困扰吗&#xff1f;本文将为你提供完整的Armbian音频配置解决方案&#…

作者头像 李华
网站建设 2026/5/29 20:26:38

B站视频下载终极指南:5步轻松保存4K超清内容

B站视频下载终极指南&#xff1a;5步轻松保存4K超清内容 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法保存B站精彩视频而…

作者头像 李华
网站建设 2026/6/7 12:45:35

68.7%合成数据驱动,KORMo-10B如何重构韩语AI生态?

68.7%合成数据驱动&#xff0c;KORMo-10B如何重构韩语AI生态&#xff1f; 【免费下载链接】KORMo-10B-sft 项目地址: https://ai.gitcode.com/hf_mirrors/KORMo-Team/KORMo-10B-sft 导语 韩国KAIST团队发布的108亿参数全开源双语大模型KORMo-10B&#xff0c;以68.74%合…

作者头像 李华
网站建设 2026/6/7 5:33:11

开源LLM本地部署利器:Xinference如何实现90%成本节省?

开源LLM本地部署利器&#xff1a;Xinference如何实现90%成本节省&#xff1f; 【免费下载链接】inference Replace OpenAI GPT with another LLM in your app by changing a single line of code. Xinference gives you the freedom to use any LLM you need. With Xinference,…

作者头像 李华