# HDU4993 Revenge of ex-Euclid

## Revenge of ex-Euclid

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 212 Accepted Submission(s): 120

Problem Description
In arithmetic and computer programming, the extended Euclidean algorithm is an extension to the Euclidean algorithm, which computes, besides the greatest common divisor of integers a and b, the coefficients of Bézout's identity, that is integers x and y such that ax + by = gcd(a, b).
---Wikipedia

Today, ex-Euclid takes revenge on you. You need to calculate how many distinct positive pairs of (x, y) such as ax + by = c for given a, b and c.

Input
The first line contains a single integer T, indicating the number of test cases.

Each test case only contains three integers a, b and c.

[Technical Specification]
1. 1 <= T <= 100
2. 1 <= a, b, c <= 1 000 000

Output
For each test case, output the number of valid pairs.

Sample Input
2
1 2 3
1 1 4

Sample Output
1
3

Source
BestCoder Round #9

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
void exgcd(int a,int b,int &d,int &x,int &y)
{
if(!b)
d=a,x=1,y=0;
else
{
exgcd(b,a%b,d,y,x);
y-=a/b*x;
}
}
int main()
{
int t,a,b,c;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&c);
int d,x,y;
int ans=0;
exgcd(a,b,d,x,y);
if(c%d)
{
printf("0\n");
continue;
}
int k=c/d;
x=x*k;
y=y*k;
int temp;
int x1=x,y1=y;
while(x1-b/d>0)
{
x1-=b/d;
y1+=a/d;
}
while(y1>0)
{
if(x1>0)

ans++;
x1+=b/d;
y1-=a/d;
}
printf("%d\n",ans);
}
return 0;
}


• 0
点赞
• 0
收藏
觉得还不错? 一键收藏
• 0
评论
08-03
10-22 136
08-17 581
03-03 588
06-24 1692
03-24 1060
08-04
09-07 94
09-07 101
02-10 329
11-02 1170

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。