Uva12169 扩展欧几里得模板
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 扩展欧几里得模板的更多相关文章
- poj 1061 青蛙的约会 (扩展欧几里得模板)
青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 扩展欧几里得模板&逆元求法
拓展欧几里得: 当 gcd ( a , b )= d 时,求绝对值和最小的 x , y 使得 x * a + y * b = d : d = gcd ( a , b ) = gcd ( b , a m ...
- poj 2115 C Looooops(推公式+扩展欧几里得模板)
Description A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...
- POJ 1061 青蛙的约会 扩展欧几里得
扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...
- Codeforces7C 扩展欧几里得
Line Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- POJ1061 青蛙的约会(扩展欧几里得)
题目链接:http://poj.org/problem?id=1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- hdu 1576 A/B 【扩展欧几里得】【逆元】
<题目链接> <转载于 >>> > A/B Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)( ...
- 51nod1256 乘法逆元【扩展欧几里得】
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...
- 例10-2 uva12169(扩展欧几里得)
题意:已知xi=(a*xi-1+b) mod 10001,且告诉你x1,x3.........x2*t-1,让你求出其偶数列 思路: 枚举a,然后通过x1,x3求出b,再验证是否合适 1.设a, b, ...
随机推荐
- Java集合XMind与注意事项
Java中集合使用时的几个注意事项: 1.ArrayList和HashMap都具有扩容 ArrayList初始化数组长度为10,扩容后的容量为原来的1.5倍. HashMap初始化的数组长度为16,扩 ...
- centos7中搭建ftp服务
博客搬家: centos7中搭建ftp服务 最近想和同学共享一些文件资源,于是在实验室服务器上搭建个ftp服务,本博客记录一下配置的流程.过程基本是参照别人的方法来做的,博客也是在别人博客基础上修改的 ...
- Codeforces_798
A.暴力把每个位置的字符改成另外25个字符,判断是否回文. #include<bits/stdc++.h> using namespace std; string s; int main( ...
- 数据库连接池 —— Druid的简单使用
Druid不仅是一个数据库连接池,还包含一个ProxyDriver.一系列内置的JDBC组件库.一个SQL Parser.支持所有JDBC兼容的数据库,包括Oracle.MySql.Derby.Pos ...
- 安装ik分词插件
下载IK安装包 https://github.com/medcl/elasticsearch-analysis-ik https://github.com/medcl/elasticsearch-an ...
- toj 3086 Passage (不错)
Passage 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交: 40 测试通过: 20 描述 Bill is a millionaire. But ...
- 高灵敏度自带DSP降噪算法的audio codec解决方案
背景调研 随着AI渗透到各行各业,人们对语音的需求也越来越大,最近一两年,各种AI音频设备如雨后春笋般冒出.各种智能AI设备的推出,意味者市场对低成本的音频采集设备越来越多.针对这种情况,我们开发 ...
- Java 中常见排序算法
经典的排序算法总结 冒泡排序算法 算法描述: 比较相邻的元素:如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数: 针 ...
- 分布式系统的CAP定理
CAP定理: 在一个分布式系统中,Consistency(数据一致性). Availability(服务可用性).Partition tolerance(分区容错性),三者不可兼得. 一致性(Cons ...
- 14.Android-使用sendMessage线程之间通信
1.Handler介绍 Handler 是一个消息分发对象.handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,通过它可以实现在不同线程之间传递消息 本章Handle ...