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 線性方程組的解集的結構
- POJ 3468 A Simple Problem with Integers(線段樹區間操作)
- POJ 3468 A Simple Problem with Integers (線段樹 區間更新)
- 【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
- 高等代數理論基礎24:線性方程組有解判別定理
- (poj3468)A Simple Problem with Integers(區間更新)
- js 線性最小二乘迴歸線方程JS
- 【基底 / 線性組合 / 線性無關(相關)】- 圖解線性代數 02圖解
- python來擬合Langmuir非線性方程PythonUI
- POJ 1925 Spiderman(線性dp)IDE
- matlab求解非線性方程的Regula Falsi方法Matlab
- 【原創】開源Math.NET基礎數學類庫使用(06)直接求解線性方程組
- matlab求解方程組Matlab
- 初等數論——同餘
- 嘗試討論線性方程組相關數學原理、機器學習模型引數求解的數學本質機器學習模型
- POJ3468 A Simple Problem with Integers---樹狀陣列(區間問題)陣列
- 新的量子演算法有望破解非線性方程 - Quanta Magazine演算法
- ProE常用曲線方程式
- 空間曲線和曲面方程
- 通過遷移的方式修改ASM磁碟組的冗餘屬性ASM
- 用中國剩餘定理解 POJ1006
- 託管資料中心:考慮安全性、冗餘性與連線性等諸多事項
- 修改ASM磁碟組冗餘模式ASM模式
- 內外網同時連線解決
- 新角度看雙線性池化,冗餘、突發性問題本質源於哪裡?| AAAI系列解讀 01AI