news 2026/5/1 7:02:22

信息学奥赛一本通 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/5/1 6:52:51

38、深入理解TLI网络编程

深入理解TLI网络编程 1. 名称到地址转换相关函数 在网络编程中,有两个重要的函数用于特定的地址检查和转换操作: - ND_CHECK_RESERVEDPORT :用于检查 argp 所指向的 struct netbuf 结构中包含的地址是否在保留端口上。 - ND_MERGEADDR :用于将“本地”地址转换…

作者头像 李华
网站建设 2026/4/23 17:19:37

腾讯开源SongGeneration:用AI技术让每个人都能创作专业级音乐

腾讯开源SongGeneration&#xff1a;用AI技术让每个人都能创作专业级音乐 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目&#xff0c;基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术&#xff0c;既能融合人声与伴奏达到和谐统一&#xff0…

作者头像 李华
网站建设 2026/4/20 2:06:08

终极指南:3分钟掌握命令行API文档转换神器

终极指南&#xff1a;3分钟掌握命令行API文档转换神器 【免费下载链接】awesome-shell A curated list of awesome command-line frameworks, toolkits, guides and gizmos. Inspired by awesome-php. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-shell 还在为…

作者头像 李华
网站建设 2026/4/28 12:52:35

MouseInc手势配置终极指南:从零到精通的效率革命

还在为重复的鼠标点击感到疲惫不堪吗&#xff1f;每天面对成百上千次的鼠标操作&#xff0c;你的手腕是否已经发出了不适的信号&#xff1f;MouseInc设置界面正是为了解决这一痛点而生&#xff0c;这款仅200KB的轻量级Windows鼠标手势工具&#xff0c;将彻底改变你的电脑操作习…

作者头像 李华