正题

链接:
http://poj.org/problem?id=2115


大意

就是给出个循环

for(i=A;i!=B;i=(i+C)mod2k)for(i=A;i!=B;i=(i+C)mod2k)for (i=A;i!=B;i=(i+C)mod2^k)

求需要循环次数


解题思路

我们定义l=2kl=2kl=2^k
首先可以推出:

Cx+A≡B(modl)Cx+A≡B(modl)Cx+A≡B(mod l)

然后解mod

Cx+A=B+lkCx+A=B+lkCx+A=B+lk

然后定义y=−ly=−ly=-l,移项

Cx+ly=B−ACx+ly=B−ACx+ly=B-A

然后我们定义d=gcd(C,l)d=gcd(C,l)d=gcd(C,l),之后同时除去d

Cx/d+ly/d=(A−B)/dCx/d+ly/d=(A−B)/dCx/d+ly/d=(A-B)/d

因为d是C和l的最大公约数那么因为CCC%d=0" role="presentation" style="position: relative;">d=0d=0d=0,lll%d=0" role="presentation" style="position: relative;">d=0d=0d=0,所以只要(A−B)(A−B)(A-B)%d=0d=0d=0这个方程就有解
之后因为这样求出的x不是最大解所以我们要:
定义g=(l/d)g=(l/d)g=(l/d)
然后

(x∗((B−A)/d)(x∗((B−A)/d)(x*((B-A)/d)%g+g)g+g)g+g)%gg<script type="math/tex" id="MathJax-Element-28">g</script>

求出最小解


代码

#include<cstdio>
using namespace std;
long long x,y,d,a,b,c,k;
long long gcdup(long long a,long long b)
{if (b==0){x=1;y=0;return a;}d=gcdup(b,a%b);long long k=x;x=y;y=k-a/b*y;return d;
}
int main()
{while (true){scanf("%lld%lld%lld%lld",&a,&b,&c,&k);if (a==0 && b==0 && c==0 && k==0) break;k=1ll<<k;d=gcdup(c,k);if ((b-a)%d) printf("FOREVER\n");else printf("%lld\n",(x*((b-a)/d)%(k/d)+(k/d))%(k/d));}
}

POJ2115-C Looooops【扩欧,同余】相关推荐

  1. jzoj1158-荒岛野人【扩欧,gcd,同余方程】

    正题 大意 有n个野人,每个野人有一个初始山洞CiCiC_i,每次向前移动距离PiPiP_i,寿命LiLiL_i,如果野人走到了最后一个山洞那么继续就好回到第一个山洞,求至少多少个山洞才可以让野人们不 ...

  2. POJ2142-The Balance【扩欧】

    前言 感谢x某q的帮助 这是它的博客(只有找本人才会解释的博客): https://blog.csdn.net/sugar_free_mint/article/details/80755188 正题 ...

  3. bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)

    Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意 ...

  4. P1082-扩欧模板同余方程【扩欧,数论】

    正题 链接: https://www.luogu.org/record/show?rid=7914999 大意 就是 ax≡1(modb)ax≡1(modb) ax≡1(modb) 给出a和b求x 解 ...

  5. SGU - 106 The equation(扩欧+细节处理)

    传送门 题目大意 给出 a x + b y + c = 0 ax+by+c=0 ax+by+c=0这一二元一次不定方程,求满足 { ( x , y ) ∣ x ∈ [ l x , r x ] , y ...

  6. poj-2115 C Looooops(扩展欧几里得)

    题解:c*x+a(mod 2^k) = b 化简得:c*x = b-a(mod 2^k) 求解一次同余式: 注意: b - a < 0的情况 #include<stdio.h> #i ...

  7. POJ - 2115 C Looooops(扩展欧几里得)

    题目链接:点击查看 题目大意:执行一个循环: for (variable = A; variable != B; variable += C) statement; 问在2的k次幂的范围内最少需要执行 ...

  8. P1516-青蛙的约会【扩欧,同余方程】

    #正题 链接: https://www.luogu.org/record/show?rid=7935281 ##大意 两只青蛙往相同方向绕圈,A蛙一次跳n米在x出发,B蛙一次跳m米在y出发,一圈长度L ...

  9. POJ 2115 C Looooops(扩展欧几里得)

    辗转相除法(欧几里得算法) 时间复杂度:在O(logmax(a, b))以内 int gcd(int a, int b) {if (b == 0) return a;return gcd(b, a % ...

最新文章

  1. php扩展的框架,新一代轻量级PHP扩展框架 Asf
  2. C++基础学习笔记001
  3. python云盘服务_Python无所不能?五分钟教会你用python打造个人云盘!
  4. 教你一步步发布一个开源库到 JCenter
  5. 《直播疑难杂症排查》之二:播放卡顿
  6. react封装子组件弹框
  7. (优秀文章保存)Quartz优秀文章保存
  8. 【测试方法篇】效率测试
  9. vs2015如何连接oracle,VS2015中C#连接Oracle数据库
  10. Vue 高效清空表单,一键清空表单
  11. linkerd mysql_linkerd ab部署测试
  12. 1 Linux下ps aux下的各种进程状态
  13. c++ 写文件怎么让0x00不被识别成结束符_使用docker-copyedit工具删除镜像中不需要的环境变量和VOLUME...
  14. [spring]maven项目中获取resources资源目录路径
  15. Ubuntu18.04 上 phpvirtualbox 折腾记
  16. html css 怎么使img和a标签在一个行内元素中间对齐
  17. 文本去重:sim哈希算法
  18. 计算机辅助绘图工具,CAD精确辅助绘图工具
  19. Qt 串口调试软件自动发送数据
  20. 几个反垃圾邮件的词汇(XBL,SBL,PBL,ROKSO)

热门文章

  1. java多线程 sycophantic_Java多线程volatile和synchronized总结
  2. mysql约束深入了解_MySQL 的约束
  3. 后端学习 - JVM(上)内存与垃圾回收
  4. leetcode509. 斐波那契数
  5. [MySQL基础]MySQL语法规范介绍
  6. [召集令]-Dijkstra的单源最短路径算法
  7. C++string容器-子串获取
  8. mysql文献综述_文献综述随笔(二十)
  9. iso qemu 安装ubuntu_基于libvirt 和QEMU在macOS安装Ubuntu
  10. 机器学习前的热身(必备)