1. 程式人生 > >小珂的苦惱

小珂的苦惱

時間限制:1000 ms  |  記憶體限制:10000 KB

描述

    小珂是一名初中生,她現在很苦惱,因為老師佈置了一個讓她苦惱的作業,你能不能幫助她呢?題目資訊如下。

        已知二元一次方程 a*x+b*y=n, 判斷這個二元一次方程有沒有整數解,x,y為未知數,其中a,b,n都為整數且不等於零,同時滿足0<a,b,n<2^16-1。

輸入

第一行有一個整數0<n<=1000000表示有 n組測試資料,接下來的每一行有三個整數分別是a,b,n
 

輸出

存在整數x和y使得方程有解,輸出“Yes”,否則輸出“No”
 

樣例輸入

2
2 4 2
3 9 7

樣例輸出

Yes
No

心得:

對於gcd(a,b)=ax+by,一定存在唯一的x和y使等式成立。

對任何整數a、b和它們的最大公約數d,關於未知數x和y的線性丟番圖方程(稱為裴蜀等式):

      ax + by = m

      有解當且僅當m是d的倍數。裴蜀等式有解時必然有無窮多個整數解,每組解x、y都稱為裴蜀數,可用輾轉相除法求得。

#include<stdio.h>
#include<math.h>

int gcd(int a,int b)//輾轉相除法求最大公約數 
{
	while(b)
	{
		int r = a%b;
		a=b;
		b=r;
	} 
	return a;
}

int main()
{
	int a;
	scanf("%d",&a);
	while(a--)
	{
		int a,b,n;
		scanf("%d %d %d",&a,&b,&n);
		int max=gcd(a,b);
		if(n%max==0)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}