hdu1576 A/B

Problem Description
要求(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

解题报告:

这是一道数论题。

有个公式:A/B%C=(A%C/B%C)%C

划线的内容必须可以整除

具体推导过程:

x*B+y*mod=1

A/B*x*B%mod=A%mod*x%mod=n*x%mod

#include <cmath>
#include <ctime>
#include <cctype>
#include <climits>
#include <cstdio>
#include <cstdlib>
#include <cstring>

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>

#define INF (INT_MAX / 10)
#define clr(arr, val) memset(arr, val, sizeof(arr))
#define pb push_back
#define sz(a) ((int)(a).size())

using namespace std;
typedef set<int> si;
typedef vector<int> vi;
typedef map<int, int> mii;
typedef pair<int, int> pii;
typedef long long ll;

const double esp = 1e-5;

#define N 50100
int main()
{
	int T,n,B;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&B);
		while(n%(B%9973)!=0)
		n+=9973;
		printf("%d\n",(n/(B%9973))%9973);
	}
	return 0;
} 




你可能感兴趣的:(数学,HDU)