从CF1920C看同余的一个性质

https://codeforces.com/problemset/problem/1920/C

同余的一个性质:

证明很显然,但是想不到这个性质

题意

给你 \(n\) 个数,划分 \(k\) 段,每段在对 \(m(m\ge 2)\) 取模之后相等即为一个合法方案,问有多少个合法方案。

断点

//check是能O(n)的
//问题在于怎么check
//经验证,  m = 2, 3, gcd(all(ai))... 时都可能有解
//16 4 | 13 4 (mod 3)
//不是去找几个特解

到此就卡死了

不能去找 \(m\) 的值,然后代入验证。

解法

\[a \equiv b\pmod m \rightarrow m \mid (a -b) \]

那么问题就转化成了给两个数 \(a, b\),问 \(a, b\) 是否能在模一个数的意义下同余,可能的话求出m。

结果拿这个问题找 AI 一问,AI 给了个 \(m | (a - b)\),整个问题就解决了。

一个很显然的思路:

对所有段同位置下的数的差值 \(a_j - a_i(i\equiv j\pmod k)\)\(\gcd_{i\pmod k}\),然后再对这个 \(\gcd\) 数组取 \(\gcd\),如果答案不为 \(1\),就说明找到了一个 \(m\)

posted @ 2024-09-25 14:06  加固文明幻景  阅读(5)  评论(0编辑  收藏  举报