问题链接:HDU-1576
思路
这道题可以用欧几里得扩展来算,但是看到网上的题解有一个方法感觉挺简单的,题解作者叫试探法。和欧几里得扩展一样,也是求方程,然后求解。根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。设x=(A/B)%9973(x是最终想计算的值,满足0<=x<=9972),则9973k+x=A/B(k为整数),得A=9973Bk+xB。因为n=A%9973与A=9973Bk+xB,所以xB%9973=n,得xB=n+9973y,亦得xB-n=9973y。故:(xB-n)%9973=0。
原博链接:HDU-15762种方法题解
AC的代码
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
long long int n, b;
cin >> n >> b;
for(int j=0;j<9973;j++)
if ((j*b - n)%9973 == 0) {cout << j << endl; break; }
}
return 0;
}