程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu 1788 Chinese remainder theorem again 最小公倍數

hdu 1788 Chinese remainder theorem again 最小公倍數

編輯:關於C++

Chinese remainder theorem again

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2014 Accepted Submission(s): 777



Problem Description 我知道部分同學最近在看中國剩余定理,就這個定理本身,還是比較簡單的:
假設m1,m2,…,mk兩兩互素,則下面同余方程組:
x≡a1(mod m1)
x≡a2(mod m2)

x≡ak(mod mk)
在0<= 記Mi=M/mi(1<=i<=k),因為(Mi,mi)=1,故有二個整數pi,qi滿足Mipi+miqi=1,如果記ei=Mi/pi,那麼會有:
ei≡0(mod mj),j!=i
ei≡1(mod mj),j=i
很顯然,e1a1+e2a2+…+ekak就是方程組的一個解,這個解加減M的整數倍後就可以得到最小非負整數解。
這就是中國剩余定理及其求解過程。
現在有一個問題是這樣的:
一個正整數N除以M1余(M1 - a),除以M2余(M2-a), 除以M3余(M3-a),總之, 除以MI余(MI-a),其中(a
Input 輸入數據包含多組測試實例,每個實例的第一行是兩個整數I(1
Output 對於每個測試實例,請在一行內輸出滿足條件的最小的數。每個實例的輸出占一行。

Sample Input
2 1
2 3
0 0

Sample Output
5

求N%Mi==m-a;

即(n+a)%Mi==0

即求這組Mi的最小公倍數


代碼:
#include 

typedef long long ll ;

ll gcd(ll a , ll b)
{
	if(b == 0)
	{
		return a;
	}
	gcd(b,a%b) ;
}
ll lcm(ll a , ll b)
{
	return a*b/gcd(a,b) ;
}
int main()
{
	int n , a ;
	while(~scanf(%d%d,&n,&a) && (n+a))
	{
		ll ans = 1 ;
		for(int i = 0 ; i < n ; ++i)
		{
			int m ;
			scanf(%d,&m)  ;
			ans = lcm(ans,m) ;
		}
		printf(%I64d
,ans-a) ;
	}
	return 0 ;
}

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved