Given two arithmetic sequences (a1,d1 i.e. first term and common difference of first sequence and similarly a2,d2),what is the best algorithm to tell whether they have any common term,and if yes then tell the lowest one.
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | nor | 150 |
Given two arithmetic sequences (a1,d1 i.e. first term and common difference of first sequence and similarly a2,d2),what is the best algorithm to tell whether they have any common term,and if yes then tell the lowest one.
Name |
---|
Let's say a[x]=b[y]. Then a1+d1*x=a2+d2*y or d1*x-d2*y=a2-a1. So, you just need to solve Diophantine equation.
I knew this method.I was wondering if there is any other way.
I think this can be done with the Chinese Remainder Theorem. A term in both sequences is congruent to a1 (mod d1) and to a2 (mod d2), so you can find a number x such that any common term must be equal to x (mod lcm(d1, d2)) using Chinese Remainder Theorem (assuming there is at least one common term). Then, you can take the smallest value with that mod value that is greater than or equal to max(a1, a2).