/**
727 · Chinese Remainder Theorem
Algorithms
Hard
Accepted Rate
32%
DescriptionSolutionNotesDiscussLeaderboard
Description
We are given two arrays num[0…k-1] and rem[0…k-1]. In num[0…k-1], every pair is coprime (gcd for every pair is 1). We need to find minimum positive number x such that:
x % num[0] = rem[0],
x % num[1] = rem[1],
.......................
x % num[k-1] = rem[k-1]
Example
Example 1:
Input:[3,4,5],[2,3,1]
Output:11
Explanation:
11 is the smallest number such that:
- When we divide it by 3, we get remainder 2.
- When we divide it by 4, we get remainder 3.
- When we divide it by 5, we get remainder 1.
Example 2:
Input:[3,4,5,11],[2,3,1,7]
Output:491
Explanation:
491 is the smallest number such that:
- When we divide it by 3, we get remainder 2.
- When we divide it by 4, we get remainder 3.
- When we divide it by 5, we get remainder 1.
- When we divide it by 11, we get remainder 7.
Tags
Recommend Courses
https://blog.csdn.net/WANGWUSHAN/article/details/108957348
https://www.lintcode.com/problem/727/
*/
package main
/**
* @param num: the given array
* @param rem: another given array
* @return: The minimum positive number of conditions to meet the conditions
*/
func remainderTheorem(num []int, rem []int) int {
// write your code here
var ls []int
var k int = 1
for _, v := range(num) {
k *= v
}
for i, v := range(num) {
var elem int = k / v
var j int = 1
for {
if elem * j % v == 1 {
break
}
j += 1
}
ls = append(ls, elem * j * rem[i])
}
var res int = 0
var s int = 0
for _, v := range(ls) {
s += v
}
res = s % k
return res
}