HDU 1576 A/B(数论)

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



推导过程

A/B = K

K = 9973*P + X

A = 9973*Q + N

得:

(9973*Q + N)/B = K = 9973*P + X

9973*Q = 9973*P*B + X*B - N

9973*(Q - P*B) = X*B - N

( X*B — N) %9973 = 0



也有看到用扩展欧几里得算法去做的



#include<iostream>

using namespace std;

int main()

{

	int T;

	__int64 n, b;

	cin>>T;

	while (T--)

	{

		scanf("%I64d%I64d", &n, &b);

		for (int i = 0; i<9973; i++)

		{

			if ((b * i - n) % 9973 == 0)

			{

				cout<<i<<endl;

				break;

			}

		}

	}

	return 0;

}


你可能感兴趣的:(HDU)