好开心又做出一道,看样子做数论一定要先看书,认认真真仔仔细细的看一下各种重要的性质 及其用途,然后第一次接触的题目 边想边看别人的怎么做的,这样做出第一道题目后,后面的题目就完全可以自己思考啦

设要+t次,列出方程  c*t-p*2^k=b-a(p是一个正整数,这里的内存相当于一个长度为2^k的圆圈,满了就重来一圈)

这样子就符合扩展欧几里德的方程基本式了

然后令  c*t-p*2^k=gcd(c,2^k);

gcd=exgcd(c,t0,2^l,p0);

解出t0;那么t=t0*(b-a)/gcd;

那么答案救出来了

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<list>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<string>
  7. #include<queue>
  8. #include<stack>
  9. #include<map>
  10. #include<vector>
  11. #include<cmath>
  12. #include<memory.h>
  13. #include<set>
  14.  
  15. #define ll long long
  16. #define LL __int64
  17. #define eps 1e-8
  18.  
  19. //const ll INF=9999999999999;
  20.  
  21. #define M 400000100
  22.  
  23. #define inf 0xfffffff
  24.  
  25. using namespace std;
  26.  
  27. //vector<pair<int,int> > G;
  28. //typedef pair<int,int> P;
  29. //vector<pair<int,int>> ::iterator iter;
  30. //
  31. //map<ll,int>mp;
  32. //map<ll,int>::iterator p;
  33.  
  34. //vector<int>G[30012];
  35.  
  36. LL extgcd(LL a,LL &x,LL b,LL &y)
  37. {
  38. if(b==0)
  39. {
  40. x=1;
  41. y=0;
  42. return a;
  43. }
  44. LL r=extgcd(b,x,a%b,y);
  45. LL t=x;
  46. x=y;
  47. y=t-a/b*y;
  48. return r;
  49. }
  50.  
  51. int main(void)
  52. {
  53. LL a,b,c,k;
  54. while(cin>>a>>b>>c>>k)
  55. {
  56. if(a+b+c+k == 0)
  57. break;
  58. LL MOD=(LL)1<<k;//这里要强制转化,坑了我好多遍,倒霉
  59. LL t0,p0;
  60. LL gcd=extgcd(c,t0,MOD,p0);
  61. LL m=b-a;
  62. if(m%gcd!=0)
  63. {
  64. puts("FOREVER");
  65. continue;
  66. }
  67. LL t=(t0*m/gcd+MOD)%MOD;//这里一定要注意,最好每一道题目都加上MOD在模MOD,因为有可能t0值是负的
  68. t=(t%(MOD/gcd)+(MOD/gcd))%(MOD/gcd);//这里要模的值要看清楚 是MODgcd,而不是MOD;
  69. cout<<t<<endl;
  70. }
  71. }

poj2115 Looooops 扩展欧几里德的应用的更多相关文章

  1. POJ2115 C Looooops 扩展欧几里德

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2115 题意 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次 ...

  2. poj 2115 C Looooops 扩展欧几里德

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23616   Accepted: 6517 Descr ...

  3. poj2115-C Looooops(扩展欧几里德算法)

    本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样.一,题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循 ...

  4. POJ2115——C Looooops(扩展欧几里德+求解模线性方程)

    C Looooops DescriptionA Compiler Mystery: We are given a C-language style for loop of type for (vari ...

  5. C Looooops(扩展欧几里德)

    C Looooops Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total S ...

  6. POJ 2115 C Looooops (扩展欧几里德 + 线性同余方程)

    分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转 ...

  7. POJ - 2115 C Looooops(扩展欧几里德求解模线性方程(线性同余方程))

    d.对于这个循环, for (variable = A; variable != B; variable += C) statement; 给出A,B,C,求在k位存储系统下的循环次数. 例如k=4时 ...

  8. poj2142-The Balance(扩展欧几里德算法)

    一,题意: 有两个类型的砝码,质量分别为a,b;现在要求称出质量为d的物品, 要用多少a砝码(x)和多少b砝码(y),使得(x+y)最小.(注意:砝码位置有左右之分). 二,思路: 1,砝码有左右位置 ...

  9. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

随机推荐

  1. HDU 1717 小数化分数2(最大公约数)

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. 灵活运用SMART原则梳理目标

    1:立刻行动 执行力是老生常谈了,提高执行力不拖延,源自于对目标的充分理解和超出常人的坚持. 如何深刻理解目标?一方面要有基础的知识.能力积累,另一方面要灵活运用SMART原则从不同维度梳理目标. 2 ...

  3. sqlserver基础操作

    启动服务: 1.在系统服务启动 2.在sql配置管理器服务选项中启动 3.在管理员cmd:net start mssqlserver;net stop mssqlserver use master g ...

  4. 关于Ceph现状与未来的一些思考

    http://blog.csdn.net/mightysheldor/article/details/51093476 Ceph从2004年提交了第一行代码,至今为止已经10年了.这个起源于Sage博 ...

  5. python数据库连接池基于DBUtils

    DBUtils模块的使用的两种方式 DBUtils是Python的一个用于实现数据库连接池的模块 安装 pip install DBUtils 1.使用姿势一(不建议此方法) 为每个线程 (资源占用过 ...

  6. Linux安装Python虚拟环境virtualenv

    1.安装virtulenv.virtulenvwrapper包 pip install virtualenv virtualenvwrapper 2.virtualenvwrapper是virtual ...

  7. 基于git的管理应用程序基线包和版本

    由于工作的需要,身为git的小白的我开始研究git相关的命令和操作.结合网上收集和廖雪峰的git教程,记录所学知识点. 相关的效果就不再这里显示了. 首先我们看一下git的常用命令: 常用命令 git ...

  8. IntelliJ Idea 常用快捷键列表 (需整理下) https://blog.csdn.net/dc_726/article/details/42784275

    [常规] https://blog.csdn.net/dc_726/article/details/42784275https://jingyan.baidu.com/article/59a015e3 ...

  9. docker redis

    https://www.cnblogs.com/cgpei/p/7151612.html 重启docker >systmctl restart docker >mkdir -p ~/red ...

  10. mpg123解码相关

    int attribute_align_arg mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmem ...