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
- 線性方程組
- 第六章 數學問題 -------- 6.11【同餘方程組】POJ1006 生理週期
- 線性方程組 入門概念
- 線性代數中的線性方程組方法
- MATLAB版線性代數-線性方程組1Matlab
- P1082 [NOIP2012 提高組] 同餘方程 尤拉定理
- 【poj3468】A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers (線段樹 區間共加)
- matlab練習程式(線性常微分方程組矩陣解)Matlab矩陣
- 高等代數:3 線性方程組的解集的結構
- 九章算術與線性方程組
- 線性方程組的直接解法——Gauss消去法
- 數值分析:線性方程組的直接解法(上)
- 一階線性非齊次方程組的通解
- 第六章 數學問題 -------- 6.9 天平稱重問題【線性同餘方程】青蛙的約會
- [學習筆記] 丟番圖方程 & 同餘 & 逆元 - 數論筆記
- 線性同餘-常見語言編譯器引數編譯
- Python解線性方程組的迭代法(3)————逐次超鬆弛(SOR)迭代法Python
- 線性差分方程解法
- 同餘
- 第六章 數學問題 -------- 6.10 特殊的同餘方程—逆元
- 高等代數理論基礎24:線性方程組有解判別定理
- 【數值計算方法】線性方程組的迭代解法-數值實驗
- js 線性最小二乘迴歸線方程JS
- 牛頓迭代法 - 求解非線性方程根的近似解
- python來擬合Langmuir非線性方程PythonUI
- matlab求解非線性方程的Regula Falsi方法Matlab
- 【數值計算方法】線性方程組迭代演算法的Python實現演算法Python
- 利用matlab求解方程和方程組Matlab
- POJ3468 A Simple Problem with Integers---樹狀陣列(區間問題)陣列
- 連續性方程
- 流線方程
- 牛頓單點線割迭代法求解非線性方程
- 初等數論——同餘
- 齊次方程組(超定方程組)的最小二乘解,及利用其擬合空間平面
- matlab求解方程組Matlab
- Sum of Consecutive Prime Numbers POJ - 2739(線性尤拉篩+尺取法)
- 淺談同餘最短路