原题入口

这个题要找到本身的模型就行了

a+c*x=b(mod 2k) ->  c*x+2k*y=b-a

求这个方程对于x,y有没有整数解.

如果没有学过,强烈建议看看我之后写的一篇博客!!

这个只要学过拓展欧几里得(好像有的叫扩展欧几里德QAQ)(求解一次整数方程的整数解)应该是能做出来的,下面简单讲讲

已知一组二元一次方程 ax+by=c(a,b为已知;x,y未知) 我们要求x和y的整数解。
这个咋做呢 首先 我们知道 gcd(a,b)=gcd(b,a%b)这个就是朴素欧几里德(辗转相除) ,又知道一个方程ax+by=gcd(a,b)必有解(通过贝祖定理可知(我也不会证明QAQ))。
这些证明见《数学一本通》或者百度搜搜。
然后我们就有 ax+by=gcd(a,b)=gcd(b, a%b)
                        =bx+(a%b)y
                        =bx+(a-[a/b]*b)y
                        =bx+ay-[a/b]*by
                        =y*a+(x-[a/b]*y)*b
最后x变成了y,y变成了x-[a/b]*y
然后就可以通过不断递归求gcd来减小a,b的范围,到b为0时就有ax+0*y=a。x显然为1,y为0。
在找到最小解之后,递归回去修改x,y。

当且仅当gcd(a,b)=1这个方程有解。

一开始对于ax+by=c这种形式的,最好先约去(a,b)的gcd,最后再给c乘回来。

这个程序最后对于sum进行了操作,这是因为要求sum的最小正整数解。

这是因为:得到两个相邻x解的间隔恰好为b(这个比较显然的吧。。QwQ),然后最小正整数的x解就为(x%b+b)了2333。(公式没用LaTeX有点丑TAT)

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cctype>
#include <iostream>
#define For(i, l, r) for(int i = (l); i <= (int)(r); ++i)
#define Fordown(i, r, l) for(int i = (r); i >= (int)(l); --i)
#define Set(a, v) memset(a, v, sizeof(a))
#define LL long long using namespace std; LL extended_gcd (LL a, LL b, LL &x, LL &y) {
LL ret, tmp;
if (!b) {x = ; y = ; return a;}
ret = extended_gcd (b, a%b, x, y);
tmp = x;
x = y;
y = tmp - a / b * y;
return ret;
} int main(){
#ifndef ONLINE_JUDGE
freopen ("program.in", "r", stdin);
freopen ("program.out", "w", stdout);
#endif
LL a, b, c, k;
for(;;) {
scanf ("%lld%lld%lld%lld", &a, &b, &c, &k);
if (!a && !b && !c && !k) return ;
k = (long long) << k;
LL x, y;
LL ret = extended_gcd (c, k, x, y); //进行拓欧,求之前写的那个方程有无解
if ((b - a) % ret != ) {printf ("FOREVER\n"); continue;} //判断gcd是否为1,判断有无解
LL sum = (x * (b - a) / ret) % k; //同比扩大的倍数
sum = (sum % (k / ret) + k / ret) % (k / ret); //求sum的正整数解
cout << sum << endl;
}
}

[POJ2115]C Looooops 拓展欧几里得的更多相关文章

  1. poj2115 C Looooops——扩展欧几里得

    题目:http://poj.org/problem?id=2115 就是扩展欧几里得呗: 然而忘记除公约数... 代码如下: #include<iostream> #include< ...

  2. POJ2115 C Looooops[扩展欧几里得]

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24355   Accepted: 6788 Descr ...

  3. Looooops(求解同余方程、同余方程用法)【拓展欧几里得】

    Looooops(点击) A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...

  4. NOIP2012拓展欧几里得

    拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...

  5. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

  6. bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得

    这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+ ...

  7. POJ 2891 Strange Way to Express Integers(拓展欧几里得)

    Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...

  8. POJ1061 青蛙的约会-拓展欧几里得

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  9. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)

    污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...

随机推荐

  1. 学习docker on windows (1): 为什么要使用docker

    为什么要用Docker? 如果我们想使用某种pc软件, 那么在互联网上查找并安装软件的流程大致如下图: 那么这就有几个问题要弄清楚: 从哪里获得软件 App Store Linux的包管理 从某些网站 ...

  2. ajax请求 readyState为0 可能原因之一

    问题:同样的代码逻辑,PC端和iOS都能正常访问,但是Android系统请求都是报错: 上网查阅,关于ajax请求失败且状态码都是0的情况有很多,最后排查的原因是:域名证书问题:

  3. ConcurrenHashMap源码分析(二)

    本篇博客的目录: 一:put方法源码 二:get方法源码 三:rehash的过程 四:总结 一:put方法的源码 首先,我们来看一下segment内部类中put方法的源码,这个方法它是segment片 ...

  4. shell编程之环境变量配置文件(4)

    1 source命令 修改了配置文件,并让它立刻生效,而不用重新登录 source 配置文件 或者 .配置文件 2 环境变量配置文件简介 PATH HISTSIZE PS1 HOSTNAME等环境变量 ...

  5. mysql 在一个实例运行情况下再搭建一个实例

    配置mysql服务 详细步骤,请参考(http://study.lishiming.net/chapter17.html#mysql), 阿铭只把简单步骤写一下. 根据阿铭提供的地址,假如你已经搭建好 ...

  6. PS如何批量生成缩略图(方法可以通用其他重复劳动)

    原图 缩略 进入正题,学生时代玩过脚本精灵的应该一点就通 原理就是:录制一系列动作,然后生成脚本,并执行(经常PS水印代码的一个可以用程序实现,一个就可以用PS脚本) 新建一个组 新建一个动作 进行你 ...

  7. JMeter之Http协议接口性能测试

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

  8. 拥抱.NET Core系列:MemoryCache 缓存过期

    在上一篇"拥抱.NET Core系列:MemoryCache 初识"中我们基本了解了缓存的添加.删除.获取,那么今天我们来看看缓存的过期机制.这里和上篇一样将把"Micr ...

  9. Oracle中的多表查询(笛卡尔积原理)

    本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查询一起完成各个复杂查询的操作: 一 ...

  10. Mysql的锁机制与PHP文件锁处理高并发简单思路

    以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出 ...