---
# System prepended metadata

title: Problem D. Candies
tags: [Meowmeow Online Judge]

---

<style>
html, body, .ui-content {
    background-image: url(https://truth.bahamut.com.tw/s01/201508/7f0e4bd0e01135c9df434733e0d1544a.JPG);
    background-color: #333;
    color: #DDD;
}
</style>

###### tags: `Meowmeow Online Judge`

# Problem D. Candies

## Description
Kumari knows that if she divides those candies into groups of size $k_i$, there are $r_i$ candies that will be left. Give you 3 pairs of $k_i$ and $r_i$. Can you calculate at least how many candies Kumari owns?
## Input
The first line has an integer $n$ which indicates how many testcases.
Each testcase contains three lines. The $i$-th line has two integers $k_i$, $r_i$.
• $1 ≤ n ≤ 200,000$
• $1 < r_i < k_i ≤ 10,000$
• gcd($k_i$, $k_j$) = 1 if $i\neq j$

## Output
Please print at least how many candies Kumari owns. It is ensured that the answer can be stored in a
32-bit signed integer.

## 解題思路
中國剩餘定理，有興趣可以去搜尋看看
要注意取餘數時分母要改成乘以乘法反元素

### 時間複雜度
取反元素 $O(lg\ n)$
總時間複雜度 $O(n\ lg\ n)$

## Code
```c++
#include <iostream>
#include <vector>
#include <utility>

std::pair<long long int, long long int> extgcd(long long int a, long long int b) {
    if (b == 0) return {1, 0};
    auto [xp, yp] = extgcd(b, a % b);
    return {yp, xp - a / b * yp};
}

int main() {
    int testcase;
    std::cin >> testcase;
    while (testcase--) {
        std::vector< std::pair<int, int> > divider(3);
        long long int product = 1;
        for (int i = 0; i < 3; i++) {
            std::cin >> divider[i].first >> divider[i].second;
            product *= divider[i].first;
        }
        long long int answer = 0;
        for (int i = 0; i < 3; i++) {
            long long int partial = product / divider[i].first;
            answer += (1LL * divider[i].second * extgcd(partial, divider[i].first).first * partial); 
        }
        std::cout << (answer % product + product) % product << std::endl;
    }
    return 0;
}
```
