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. 形象解释各种卷积算法(Convolution animations)

    No padding, no strides Arbitrary padding, no strides Half padding, no strides Full padding, no strid ...

  2. HDU_1232_并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1232 第一道并查集,挺好理解的,初始化,查找根节点,连接,路径压缩. #include<iostream& ...

  3. bootstrap 按钮组件

    按钮组件主要的类名: .btn-toolbar     把几个  .btn-group 组合在一起,更复杂的组件 .btn-group .btn-group-vertical   垂直堆叠显示    ...

  4. mysql和 oracle 的区别

    垂直拆分: 把一个数据库中不同业务单元的数据分到不同的数据库里面.水平拆分: 根据一定的规则把同一业务单元的数据拆分到多个数据库中. 读写分离 主:写 从:查 ==================== ...

  5. 编写SQL语句(快速回顾)

    注:源自于<Java程序员面试秘笈>! 1.创建数据库MYDB create database MYDB 2.创建学生表student (sno,sname,ssex,sage,sclas ...

  6. 《Redis5.x入门教程》正式推出

    关注公众号CoderBuff回复"redis"可抢先获取<Redis5.x入门教程>PDF完整版 在<ElasticSearch6.x实战教程>之后,又斗胆 ...

  7. gcc和g++的区别:安装、版本、编译(转)

    用以下命令: yum install gcc 安装的只有gcc,而不会安装g++.gcc是编译器合集,而gcc-g++或简称g++则是C++编译器.gcc成为了编译器的选择器.gcc通过识别被编译的源 ...

  8. Maven项目pom文件的节点释意

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. 1 Nginx + 12 Tomcat +2DB 实现2个程序负载均衡

    根据真实生产环境 总结. 硬件:共计5台服务器  1台负载windows.2台业务windows.2台数据库linux 业务:运行两个程序,两个数据库 具体:63服务器安装 Nginx 做负载 :61 ...

  10. string的基本操作

    在C++中,string 可以来定义一个字符串,用之前得调用下相应的库    #include<string>    . 可以不用初始化字符串容量大小,系统会根据后续的赋值自动安排其容量大 ...