# 長い数列解説 原案: olphe, 解説: [qLethon](https://twitter.com/pu__Ne) $N > M$ であれば,答えは `Yes` になります.なぜなら,$M$ で割ったあまりは $M$ 種類しかないので,少なくとも 1 つは $v_i \equiv v_j \pmod{M}$ となる $i, j\ (i < j)$ があるからです(鳩の巣原理). $N \le M$ の場合は愚直に数列を作れば良いので,bool 型の配列などで重複を管理することで 1 つのテストケースあたり $O(M)$ で解けます. 実際には,愚直に数列を作っていき,途中で重複が見つかったら答えを出力することにより,先述の場合分けが不要になります. ```c++ #include <bits/stdc++.h> using namespace std; void solve(){ int n, m, v, a, b; cin >> n >> m >> v >> a >> b; vector<bool> used(m); used[v % m] = true; for (int i = 2; i <= n; i++){ v = a * v + b; v %= m; if (used[v]){ puts("Yes"); return; } used[v] = true; } puts("No"); } int main(){ int t; cin >> t; while (t--){ solve(); } ```