1. 程式人生 > >A/B (真·數論水題)

A/B (真·數論水題)

A/B

要求(A/B)%9973,但由於A很大,我們只給出n(n=A%9973)(我們給定的A必能被B整除,且gcd(B,9973) = 1)。
Input
資料的第一行是一個T,表示有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

由n=A%9973,可得A=k9973+n
設A/B=C,則(A/B)%9973=C%9973=X(所要求的結果),
所以C=p

9973+X,即A/B=p9973+X
所以A=B
p9973+BX
因為A=k9973+n
所以k
9973+n=Bp9973+BX
所以B
X-n=(k-B*p)9973
所以(B
X-n)%9973=0

已知B和n,又知0<=X<9973,所以列舉X值即可,滿足條件即是答案

#include<cstdio>
using namespace std;
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int n,b;
		scanf("%d%d",&n,&b);
		for(int i=0;i<
9973;i++){ if((((b%9973)*i)%9973-n)%9973==0){//運用模運算性質防止超int printf("%d\n",i); break; } } } return 0; }