POJ 2891-trange Way to Express Integers(解線性同餘方程組)
Time Limit: 1000MS | Memory Limit: 131072K | |
Total Submissions: 13819 | Accepted: 4451 |
Description
Choose k different positive integers a1, a2, …, ak. For some non-negative m, divide it by every ai (1 ≤ i ≤ k) to find the remainder ri. If a1, a2, …, ak are properly chosen, m can be determined, then the pairs (ai, ri) can be used to express m.
“It is easy to calculate the pairs from m, ” said Elina. “But how can I find m from the pairs?”
Since Elina is new to programming, this problem is too difficult for her. Can you help her?
Input
The input contains multiple test cases. Each test cases consists of some lines.
- Line 1: Contains the integer k.
- Lines 2 ~ k + 1: Each contains a pair of integers ai, ri (1 ≤ i ≤ k).
Output
Output the non-negative integer m on a separate line for each test case. If there are multiple possible values, output the smallest one. If there are no possible values, output -1.
Sample Input
2 8 7 11 9
Sample Output
31
Hint
All integers in the input and the output are non-negative and can be represented by 64-bit integral types.
Source
題目意思:
解題思路:
/*
* Copyright (c) 2016, 煙臺大學計算機與控制工程學院
* All rights reserved.
* 檔名稱:exgcd.cpp
* 作 者:單昕昕
* 完成日期:2016年4月2日
* 版 本 號:v1.0
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<malloc.h>
using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll& x,ll& y)//擴充歐幾里得
{
if(b==0)
{
x=1;
y=0;
return a; //d=a,x=1,y=0,此時等式d=ax+by成立
}
ll d=exgcd(b,a%b,y,x);
y-=x*(a/b); //係數x、y的取值是為滿足等式d=ax+by
return d;
}
ll solve(ll n)//解同餘方程組
{
ll a1,a2,r1,r2,x0,y0;
bool ifhave=true;
cin>>a1>>r1;
for(int i=1; i<n; ++i)
{
cin>>a2>>r2;
ll a=a1,b=a2,c=r2-r1;
ll d=exgcd(a,b,x0,y0);
if(c%d!=0) ifhave=false;
int t=b/d;
x0=(x0*(c/d)%t+t)%t;
r1=a1*x0+r1;
a1=a1*(a2/d);
}
if(!ifhave) r1=-1;
return r1;
}
int main()
{
ll t;
while(cin>>t)
{
cout<<solve(t)<<endl;
}
return 0;
}
/**
2
8 7
11 9
**/
相關文章
- POJ 2891 Strange Way to Express IntegersExpress
- POJ 2891 Strange Way to Express Integers(擴充套件GCD)Express套件GC
- Strange Way to Express Integers(中國剩餘定理+不互質)Express
- 線性方程組
- 實驗五 迭代法解線性方程組與非線性方程(android)Android
- 線性代數中的線性方程組方法
- 【POJ 3243-Clever Y】 與【POJ 2417-Discrete Logging】(解高次同餘方程 Baby-Step-Gaint-Step)AI
- MATLAB版線性代數-線性方程組1Matlab
- 實驗一 直接法解線性方程組(android)Android
- 九章算術與線性方程組
- 高等代數:3 線性方程組的解集的結構
- matlab練習程式(線性常微分方程組矩陣解)Matlab矩陣
- POJ 3468 A Simple Problem with Integers(線段樹區間操作)
- POJ 3468 A Simple Problem with Integers (線段樹 區間更新)
- P1082 [NOIP2012 提高組] 同餘方程 尤拉定理
- 【poj3468】A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers (線段樹 區間共加)
- POJ 3468-A Simple Problem with Integers(區間更新線段樹)
- 1265. [NOIP2012] 同餘方程
- [學習筆記] 丟番圖方程 & 同餘 & 逆元 - 數論筆記
- 線性同餘-常見語言編譯器引數編譯
- Python解線性方程組的迭代法(3)————逐次超鬆弛(SOR)迭代法Python
- (poj3468)A Simple Problem with Integers(區間更新)
- 同餘
- 高等代數理論基礎24:線性方程組有解判別定理
- 【數值計算方法】線性方程組的迭代解法-數值實驗
- 牛頓迭代法 - 求解非線性方程根的近似解
- js 線性最小二乘迴歸線方程JS
- 【基底 / 線性組合 / 線性無關(相關)】- 圖解線性代數 02圖解
- POJ 1925 Spiderman(線性dp)IDE
- python來擬合Langmuir非線性方程PythonUI
- 利用matlab求解方程和方程組Matlab
- 【數值計算方法】線性方程組迭代演算法的Python實現演算法Python
- 流線方程
- matlab求解非線性方程的Regula Falsi方法Matlab
- 連續性方程
- 齊次方程組(超定方程組)的最小二乘解,及利用其擬合空間平面
- 初等數論——同餘