#58-【扩展欧几里得】a/b

版权声明:反正也没有人会转,下一个 https://blog.csdn.net/drtlstf/article/details/81705055

Description

要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。

Input

数据的第一行是一个T(1<=T<=1,000,000),表示有T组数据。

每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。

Output

对应每组数据输出(A/B)%9973。

Sample Input

2
1000 53
87 123456789

Sample Output

7922
6060

扩展欧几里得......

#include <iostream>

using namespace std;

int x, y;

void gcd(int a, int b) // 扩展欧几里得.
{
	int t;
	
	if (b)
	{
		gcd(b, a % b);
		t = x;
		x = y;
		y = t - (a / b) * y;
	}
	else
	{
		x = 1;
		y = 0;
	}
	
	return;
}

int main(void)
{
	int a, b;
	
	scanf("%d", &a); // 化(tou)简(lan).
	while (~scanf("%d%d", &a, &b))
	{
		gcd(b, 9973);
		printf("%d\n", (x + 9973) * a % 9973); // 化简*2
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/drtlstf/article/details/81705055
今日推荐