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

参考人家的 如下

如i=65534,当i+=3时,i=1

其实就是 i=(65534+3)%(2^16)=1

有了这些思想,设对于某组数据要循环x次结束,那么本题就很容易得到方程:

x=[(B-A+2^k)%2^k] /C

即 Cx=(B-A)(mod 2^k)  此方程为 模线性方程,本题就是求X的值。

为了统一

令a=C

b=B-A

n=2^k

那么原模线性方程变形为:

ax=b (mod n)

该方程有解的充要条件为 gcd(a,n) | b ,即 b% gcd(a,n)==0

令d=gcd(a,n)

有该方程的 最小整数解为 x = e (mod n/d)

其中e = [x0 mod(n/d) + n/d] mod (n/d) ,x0为方程的最小解

那么原题就是要计算b% gcd(a,n)是否为0,若为0则计算最小整数解,否则输出FOREVER

据说。。

最小解 X=x*(B/d)%K;之后,为了保证X为最小正整数解需要做如下变换
(X+K)%(K/d)

View Code

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<stdlib.h>
 5 #include<cmath>
 6 #define LL long long
 7 using namespace std;
 8 LL exgcd(LL a,LL b,LL &x,LL &y)
 9 {
10     if(b == 0)
11     {
12         x = 1; y = 0; return a;
13     }
14     LL d = exgcd(b, a % b,x,y);
15     LL temp = x;
16     x = y;
17     y = temp - a / b * y;
18     return d;
19 }
20 int main()
21 {
22     LL A,B,C,k;
23     while(cin>>A>>B>>C>>k)
24     {
25         if(!A&&!B&&!C&&!k)
26             break;
27         LL a = C;
28         LL b = B-A;
29         LL n = 1LL<<k;
30         LL x,y;
31         LL d = exgcd(a,n,x,y);
32         if(b%d!=0)
33         {
34             puts("FOREVER");
35             continue;
36         }
37         x = x*(b/d)%n;
38         x = (x+n)%(n/d);
39         cout<<x<<endl;
40     }
41     return 0;
42 }

转载于:https://www.cnblogs.com/shangyu/archive/2013/02/19/2917724.html

poj2115C Looooops相关推荐

  1. POJ2115-C Looooops【扩欧,同余】

    正题 链接: http://poj.org/problem?id=2115 大意 就是给出个循环 for(i=A;i!=B;i=(i+C)mod2k)for(i=A;i!=B;i=(i+C)mod2k ...

  2. NOI数学之提高级:初等数论

    欧拉定理详解 欧拉定理详解_郝伟老师的博客--大数据.并行计算与人工智能时代-CSDN博客_欧拉定理 欧拉函数与欧拉定理 欧拉函数与欧拉定理_leader_one的博客-CSDN博客_欧拉定理 欧拉定 ...

  3. C Looooops POJ - 2115

    C Looooops POJ - 2115 题目: A Compiler Mystery: We are given a C-language style for loop of type state ...

  4. [数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM

    文章目录 C Looooops description solution code 跳跳棋 description solution code The Luckiest number descript ...

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

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

  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

    被虐得很惨的一道题,WA了无数次,根据题意推出 C * x + (2 ^ k) * y = B - A,用拓展欧几里德求出x的最小值.如果无解则是死循环! /*Accepted 164K 0MS C+ ...

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

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

  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. SharePoint2013自定义登录页面
  2. Web services 安全实践: 基于 HTTP Basic Authentication 为 Web services 配置传输层安全机制...
  3. 【week3】psp (技术随笔)
  4. Linux下的进程概论与编程二(进程控制)
  5. php 模糊过滤字符串,PHP简单字符串过滤方法示例
  6. oracle未找到时区,Oracle ADF 未找到时区错误
  7. 如何在工作中快速成长?致工程师的10个技巧
  8. windows7更改开始菜单外观的方法
  9. asp.net checkboxlist绑定数据读取出来
  10. linux下播放wma格式,Ubuntu 20.04中使Rhythmbox支持WMA格式文件播放
  11. 91卫图助手下载器永久免费啦!!
  12. 在家如何下载各大权威数据库文献
  13. miui免root冻结,免root停用miui应用
  14. 暴力解决Centos6YUM下Loaded plugins: fastestmirror Determining fastest mirror和Could not retrieve mirro
  15. Fastjson1.2.47反序列化漏洞复现
  16. Visual Studio2019完全卸载方法
  17. SDX62出现WARNING: CPU: 0 PID: 8743 at net/netfilter/nf_nat_core.c:614 nf_nat_setup_info+0x8e4/0x900
  18. PKI技术原理(收集 整理 归纳)
  19. 2016微信抢红包助手及源码
  20. 黑板报首期(080527)优秀文章推荐

热门文章

  1. 一步步通过命令行cl.exe编译Windows程序
  2. linux下汇编语言开发总结
  3. 用虚拟机安装了红帽后,我确实没设置用户名密码,但现在一打开就让输入用户名密码。这种情况该怎么办??
  4. EndNote使用技巧之一--参考文献的导入
  5. 我是如何使用laydate日历插件更换掉老项目不好用的日历插件datepicker的
  6. ajax修改按钮的html值,ajax - 在yii 1中使用ajax根据选定的单选按钮选项更新html字段值 - 堆栈内存溢出...
  7. php实现标签云,php标签云的实现代码
  8. php与mysql连接程序_PHP与Mysql连接
  9. 国际站html代码,国际站必须看得懂的HTML代码
  10. 测试社交软件有哪些,性格测试:测你适合哪个社交平台