NOIP 考前 数论复习

POJ 2891

x=r1 (mod a1)

x=r2 (mod a2)

x=a1*x+r1,x=a2*y+r2;

a1*x-a2*y=r2-r1;

用Extend_Gcd求出m1*x+m2*y=d; d=Gcd(x,y);

那么就可以解出原来的x=(x*(r2-r1)/d)

那么代入原式r1=a1*x+r1 新的a1=lcm(a1,a2);

 1 #include <cstdio>
 2 #define LL long long
 3 LL a1,a2,r1,r2,x,y,n;
 4 LL Extend_Gcd(LL a,LL b,LL &x,LL &y)
 5 {
 6     if (b==0) {x=1,y=0; return a;}
 7     LL Ret=Extend_Gcd(b,a%b,x,y);
 8     LL Tmp=x;
 9     x=y; y=(Tmp-a/b*y);
10     return Ret;
11 }
12 int main()
13 {
14     // freopen("c.in","r",stdin);
15     while (scanf("%lld",&n)!=EOF)
16     {
17         scanf("%lld%lld",&a1,&r1); bool Ok=true;
18         for (LL i=1;i<n;i++)
19         {
20             scanf("%lld%lld",&a2,&r2);
21             LL a=a1,b=a2,m=r2-r1;
22             LL d=Extend_Gcd(a,b,x,y);
23             if (m%d) Ok=false;
24             x=(((x*m/d))%(b/d)+(b/d))%(b/d);
25             r1=x*a1+r1;
26             a1=(a1*a2)/d;
27         }
28         if (Ok) printf("%lld\n",r1); else puts("-1");
29     }
30     return 0;
31 }

POJ 2891

时间: 2024-10-13 03:31:55

NOIP 考前 数论复习的相关文章

NOIP 考前 队列复习

BZOJ 1127 1 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #define M 2020 7 using namespace std; 8 int n,k,a[M][M]; 9 long long sum[M][M]; 10 long long Get_Sum(int x1,int y1,int x2,int y2) 1

NOIP 考前 数据结构复习

BZOJ 1455 左偏树即可 1 #include <cstdio> 2 #define LL long long 3 const LL Maxn=1000100; 4 struct Info{LL l,r,v,Dis;}Tree[Maxn]; 5 LL Father[Maxn],n,m,Dead[Maxn],u,v; 6 inline void Swap(LL &x,LL &y){LL t=x;x=y;y=t;} 7 LL Get(LL x) {return x==Fath

NOIP考纲总结+NOIP考前经验谈

NOIP考纲总结+NOIP考前经验谈 首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 c.乘法(应该只会有高精乘单精) d.高精度除单精                 (后面c,d考的可能性较小,应该只考a,b) 排序算法 a.选择排序 b.插入排序 c.hash排序 d.归并排序(单纯的排序可能用不到,有快排就行了,但是归并排序的思想很重要)

noip2017考前基础复习——数论数学

·最大公约数 gcd 辗转相除法  gcd(a,b)=gcd(b,a%b) 1 int gcd(int x,int y){ 2 if(y==0) return x; 3 return gcd(y,x%y); 4 } 效率O(logn) ·最小公倍数 lcm 可由最大公约数推来 lcm(a,b)=a*b/gcd(a,b) 1 int lcm(int x,int y){ 2 int p=gcd(x,y); 3 return a*b/p; 4 } 效率O(logn) ·扩展欧几里得 extgcd 求a

noip考前抱佛脚 数论小总结

exCRT 求解韩信点兵问题,常见的就是合并不同\(mod\). 先mo一发高神的板子 for(R i=2;i<=n;++i){ ll Y1,Yi,lcm=Lcm(p[i],p[1]); exgcd(p[1],p[i],a[i]-a[1],Y1,Yi); add(a[1],mul(p[1],Y1,lcm),lcm),p[1]=lcm; } 思想是合并方程组,现在假设我们要求解的是: \[x-p_0*y_0=a_0\]\[x-p_i*y_i=a_i\] \(x\)是实际的值,显然有: \[p_0*

NOIP考前临时抱佛脚(算是考前日记吧)

谨以此祭奠我即将爆炸的NOIP2017. $Mingqi\_H\ \ 2017.09.24$ Day -47 突然发现半年来自己从来没有写对过SPFA,最近几天才发现自己的板子一直是错的...赶紧找个例题修一下板子: 1 #include<cstring> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 const int maxn = 1e6+10; 6 struct Edge{ 7 int

【NOIP考前模拟赛】纯数学方法推导——旅行者问题

一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取.另外博主使用此题并没有获得出题人授权,如果出题人看到这篇blog并认为在下侵犯了您的权利,请用站内消息与在下联系,在下会立即删除这篇blog,给您带来的困扰之处敬请谅解. 博主上传这道题主要是因为这题牵扯许多数学运算,推导过程比较复杂,但是却没有用到任何算法或者数学定理,可以说这是一道想法题的典范.

NOIP 考前 暴力练习

BZOJ 1028 暴力枚举听的那张牌,和那个多余的两张牌,其余的mod3后模拟就可以了 1 #include <cstdio> 2 const int Maxn=510; 3 int n,m,a[Maxn],b[Maxn],cnt,Ans[Maxn],x; 4 bool Check() 5 { 6 for (int i=1;i<=n;i++) 7 if (a[i]>=2) 8 { 9 for (int j=1;j<=n+2;j++) b[j]=a[j]; 10 b[i]-=

NOIP 考前 图论练习

LJOJ 1500: 题目:http://www.docin.com/p-601990756.html Sol:贪心,从叶子结点往上加入无法传递了,就需要建设. Dfs返回的是到达叶子节点最多所要的能量,如果大于最大能量就需要建设放大器. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 const int Maxn=100100;