
Acwing 1301. C 循环 扩展欧几里得算法
这是算法的一个变形
发布日期:2021-05-12 17:10:51
浏览次数:14
分类:精选文章
本文共 928 字,大约阅读时间需要 3 分钟。
对于 C 语言的循环语句,形如:
for (variable = A; variable != B; variable += C)
statement; 请问在 k 位存储系统中循环几次才会结束。若在有限次内结束,则输出循环次数。否则输出死循环。
输入格式
多组数据,每组数据一行四个整数 A,B,C,k。读入以 0 0 0 0 结束。
输出格式
若在有限次内结束,则输出循环次数。否则输出 FOREVER。
数据范围
1≤k≤32, 0≤A,B,C<2k 输入样例:3 3 2 163 7 2 167 3 2 163 4 2 160 0 0 0
输出样例:
0232766FOREVER
这道题很明显就是一个欧几里得算法的一个变形。

a + n ∗ c − ( 1 < < k ) ∗ m = b a + n * c- (1 << k ) * m = b a+n∗c−(1<<k)∗m=b
n ∗ c − ( 1 < < k ) ∗ m = b − a n * c- (1 << k ) * m = b - a n∗c−(1<<k)∗m=b−a a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b) 然后使用扩展欧几里得算法,去把 c,(1<<k)作为扩展欧几里得的a和b,然后去求n,m做这道题的固定套路是对m除以k,然后用类似于求哈希函数一样,最后输出答案
代码如下。
#includeusing namespace std;typedef long long LL;LL exgcd(LL a,LL b,LL &x,LL &y){ if(!b) { x=1;y=0; return a; } LL d=exgcd(b,a%b,y,x); y-=a/b*x; return d;}int main(void){ LL a,b,c,k; while(cin>>a>>b>>c>>k,a||b||c||k) { k=(LL)1<
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月17日 00时30分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
3、条件查询
2021-05-14
5、分组函数 / 聚合函数
2021-05-14
8、子查询
2021-05-14
cordova打包apk更改图标
2021-05-14
开启与配置SMTP服务器
2021-05-14
postman基本使用方法
2021-05-14
域名解析步骤
2021-05-14
APP卡片式设计
2021-05-14
1.普通注册界面(html)(转载于JavaWeb应用开发与实践)
2021-05-14
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2021-05-14
云数据库
2021-05-14
图计算
2021-05-14
大数据在不同领域的应用
2021-05-14
页面置换算法
2021-05-14
推荐系统资料
2021-05-14
文件系统的层次结构
2021-05-14
减少磁盘延迟时间的方法
2021-05-14
vue(渐进式前端框架)
2021-05-14
权值初始化和与损失函数
2021-05-14
案例讨论
2021-05-14