Uva12169(扩展欧几里得)

题意:

已知 $x_i=(a*x_{i-1}+b) mod 10001$,且告诉你 $x_1,x_3.........x_{2t-1}$, 让你求出其偶数列

解法:

令$ x_2=(ax_1+b)mod 10001$,$x_3= (ax_2+b)mod 10001$

解得:$x_3+10001k=a^{2}x_1+( a + 1) b$

移像得:$x_3 - a^{2}x_1=( a + 1) b - 10001k$

把 $b$ 和$(-k)$看成是未知数,这就是求解一个 $ax+by=c$ 的方程,扩展欧几里得可解

见代码

 /*
由于a的范围只有1e5,所以我们可以直接枚举a的所有值,
然后根据公式求出b的值,之后根据a和b的值递推所有的原数列的值
期间会用到扩展欧几里得解线性方程组
如果有不一样的,说明就不存在,重来
*/
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod = ;
ll f[*], n; //扩展欧几里得解线性方程组
ll exgcd(ll a, ll b, ll &x, ll &y){
if (b == ){
x = , y = ;
return a;
}
ll r = exgcd(b, a%b, x, y);
ll t = x;
x = y;
y = t - a / b*y;
return r;
} inline bool linear_equation(ll a, ll b, ll c, ll &x, ll &y){
ll d = exgcd(a, b, x, y);
if (c%d) return false;
ll k = c / d;
x *= k; y *= k; //求得的只是其中一组解
return true;
} bool check(ll a,ll b) {
for (int i = ; i <= n * ; i++) {
ll now = (a*f[i - ] + b) % mod;
if (i & ) {
if (now == f[i]) continue;
else return false;
}
else f[i] = now;
}
return true;
} int main() {
scanf("%d", &n);
for (int i = ; i <= n * ; i += ) scanf("%lld", &f[i]);
for (ll a = ; a <= ; a++) {
ll b, k;
if (!linear_equation(a + , mod, f[] - a*a*f[], b, k))continue;
if (check(a, b)) break;
}
for (int i = ; i <= * n; i+=) {
printf("%lld\n", f[i]);
}
return ;
}

Uva12169 扩展欧几里得模板的更多相关文章

  1. poj 1061 青蛙的约会 (扩展欧几里得模板)

    青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status ...

  2. 扩展欧几里得模板&逆元求法

    拓展欧几里得: 当 gcd ( a , b )= d 时,求绝对值和最小的 x , y 使得 x * a + y * b = d : d = gcd ( a , b ) = gcd ( b , a m ...

  3. poj 2115 C Looooops(推公式+扩展欧几里得模板)

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

  4. POJ 1061 青蛙的约会 扩展欧几里得

    扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...

  5. Codeforces7C 扩展欧几里得

    Line Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status ...

  6. POJ1061 青蛙的约会(扩展欧几里得)

    题目链接:http://poj.org/problem?id=1061 青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  7. hdu 1576 A/B 【扩展欧几里得】【逆元】

    <题目链接> <转载于 >>> > A/B Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)( ...

  8. 51nod1256 乘法逆元【扩展欧几里得】

    给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...

  9. 例10-2 uva12169(扩展欧几里得)

    题意:已知xi=(a*xi-1+b) mod 10001,且告诉你x1,x3.........x2*t-1,让你求出其偶数列 思路: 枚举a,然后通过x1,x3求出b,再验证是否合适 1.设a, b, ...

随机推荐

  1. Scala 学习(10)之「集合 」

    数组 定长数组 Array:采用()访问,而不是[],下标从 0 开始. val array1 = new Array[String](5) //创建数组 println(array1) //返回数组 ...

  2. 关于线段树的感悟(Segment Tree)

    线段树的感悟 : 学过的东西一定要多回头看看,不然真的会忘个干干净净. 线段树的 Introduction : English Name : Segment Tree 顾名思义 : 该数据结构由两个重 ...

  3. 轻松搞懂Python递归函数的原理与应用

    递归: 在函数的定义中,函数内部的语句调用函数本身. 1.递归的原理 学习任何计算机语言过程中,“递归”一直是所有人心中的疼.不知你是否听过这个冷笑话:“一个面包,走着走着饿了,于是就把自己吃了”. ...

  4. 小cookie,大智慧

    Cookie是什么?cookies是你访问网站时创建的数据片段文件,通过保存浏览信息,它们使你的在线体验更加轻松. 使用cookies,可以使你保持在线登录状态,记录你的站点偏好,并为你提供本地化支持 ...

  5. Windows 远程桌面连接Ubuntu14.04

    在Ubuntu系统进行如下系统配置 1.安装xrdp sudo apt-get install xrdp 2.安装vnc4server sudo apt-get install vnc4server ...

  6. CDN&对象存储

    概念 CDN是什么:名词解释不清,加快静态资源访问的技术 CDN原理:将静态资源缓存到用户所在城市 实现 步骤1:注册七牛云账号 https://portal.qiniu.com/signup?cod ...

  7. redis系列-14点的灵异事件

    概述 项目组每天14点都会遭遇惊魂时刻.一条条告警短信把工程师从午后小憩中拉回现实.之后问题又神秘消失.是PM喊你上工了?还是服务器给你开玩笑?下面请看工程师如何一步一步揪出真凶,解决问题. 如果不想 ...

  8. OpenCV图像变换二 投影变换与极坐标变换实现圆形图像修正

    投影变换 在放射变换中,物体是在二维空间中变换的.如果物体在三维空间中发生了旋转,那么这种变换就成为投影变换,在投影变换中就会出现阴影或者遮挡,我们可以运用二维投影对三维投影变换进行模块化,来处理阴影 ...

  9. Webpack之魔法注释/* webpackChunkName:"lodash" */的做用

    之前在vue的路由配置文件中看到了/* webpackChunkName:"lodash" */这个注释, 在学习了webpack之后了解其做用,作用就是webpack在打包的时候 ...

  10. python环境开发

    Python3 下载 Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到: Python 官网:https://www.python.org/ 你可以在以下链接中下载 ...