题目链接:点击查看

题目大意:执行一个循环:

for (variable = A; variable != B; variable += C)

statement;

问在2的k次幂的范围内最少需要执行多少次

题目分析:我们可以先利用同余方程列出公式:

进而可以化成这阵形式:

这样直接用拓展欧几里得求出X就是答案了

代码:

#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e4+100;LL ex_gcd(LL a,LL b,LL &x,LL &y)
{if(b==0){x=1;y=0;return a;}LL ans=ex_gcd(b,a%b,y,x);y-=a/b*x;return ans;
}int main()
{
//  freopen("input.txt","r",stdin);LL a,b,c,k;while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)!=EOF&&a+b+c+k){LL x,y;LL d=ex_gcd(c,1LL<<k,x,y);if((b-a)%d!=0)printf("FOREVER\n");else{LL ans=x*(b-a)/d;LL mod=(1LL<<k)/d;ans=(ans%mod+mod)%mod;printf("%lld\n",ans);}}return 0;
}

POJ - 2115 C Looooops(扩展欧几里得)相关推荐

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

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

  2. POJ - 2142 The Balance(扩展欧几里得)

    题目链接:点击查看 题目大意:给出两种重量的砝码,我们需要利用天平称出指定重量的药物,我们需要求出这两种砝码各自的数量,使得砝码数量之和最小 题目分析:我们可以先列出关系式,假设两个砝码的重量分别为a ...

  3. poj 2115 C Looooops(扩展欧几里德算法)

    题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束. 比如:当k=4时,存储的数 i 在0-15之间循环.(本题默认为无符号) 若在有限次内结束,则输出 ...

  4. 扩展欧几里得 POJ 1061

    感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...

  5. POJ - 1061 青蛙的约会(扩展欧几里得)

    题目链接:点击查看 题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间 题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了 ...

  6. POJ 2142——扩展欧几里得

    题目是很裸的扩展欧几里得,但是对x,y有限制条件,要求所有x,y中abs(x)+abs(y)最小,在这个条件下要求abs(a* x)+abs(b* y)最小 显然我们需要用扩展欧几里得求得一组解,问题 ...

  7. POJ 1061扩展欧几里得

    扩展欧几里得的模板题,需要注意的是为了得到一个最小正数解我们要使ax+by=c中的a,b都是正数 #include<cstdio> #include<cstring> #inc ...

  8. POJ 1061 青蛙的约会 (扩展欧几里得)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 97673   Accepted: 18409 Descripti ...

  9. 求解线性同余方程--扩展欧几里得

    资料来源:https://blog.csdn.net/ //求解ax=b(mod m) 返回0为无解,否则返回gcd(a,m)个mod m意义下的解,用X[]存 int mod(int a, int ...

最新文章

  1. JAVA中定义常量的几种方式
  2. [Winform]检测exe是否已经运行,并将其置顶
  3. python 私有和保护成员变量如何实现?—— 单下划线 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量; 双下划线 开始的是私有成员,意思是只有类对象自己能访问...
  4. jdbc链接数据库mysql
  5. DL之CNN:自定义SimpleConvNet【3层,im2col优化】利用mnist数据集实现手写数字识别多分类训练来评估模型
  6. 网络克隆报a:\ghosterr.txt故障解决一例
  7. windows自定义快速启动(运行)命令
  8. 关于 Cisco SCE 的介绍
  9. trigger_name 的命名规范
  10. 【文件包含、宏、条件编译】(学习笔记21--预处理命令)
  11. IDEA 2020 配置 Maven 创建 Spring Boot 项目
  12. 强烈推荐 | 算法/深度学习/NLP面试笔记
  13. js 将16进制转为字符串
  14. 为什么鸿蒙不掉符,教你如何使用鸿蒙符 鸿蒙符的挽歌一波流的逆袭
  15. Xilinx zynqmp USB开发
  16. excel 公式 TEXT/INDIRECT/ROW(XX)
  17. 汽车结构嵌件市场现状及未来发展趋势
  18. 列举MySQL事务的隔离级别_mysql dba系统学习(22)数据库事务详解
  19. 软件生命周期模型——瀑布模型
  20. 《思辨与立场》听书笔记

热门文章

  1. MySQL高级 - 应用优化
  2. Eureka-服务发现
  3. Nginx的rewrite之if指令(一)
  4. zookeeper的名词复盘-Watcher
  5. 初步认识Volatile-JMM
  6. MVC 顶层设计-ModelAndView
  7. 类加载的双亲委派机制
  8. 定义和使用含有泛型的类
  9. 字典-字典的统计、合并、清空操作
  10. android fragment动态添加,Android动态添加Fragment