###题目链接###
题目大意: 给你一个 x ,让你求出最小的正整数 n 使得 n * (n + 1) / 2 % x == 0 ,即 n * (n + 1) % 2x == 0 。
分析:
1、由于 n * (n + 1) 为 2x 的倍数,故分离出它们各自的某个因数使得 k1 * k2 == 2x 。
则令 k2 * b = n + 1 ,k1 * a = n 。则有:

2、显然上述 一式 为不定方程,倘若先将负号放到 a 里面,则系数分别为 k2 与 k1 ,有解 b 与 a 当且仅当 gcd(k2,k1) | 1 ,故 k2 与 k1 必须互质。
3、故结合二式,求得 k1 与 k2 互斥时的解即可。很直接的做法是 枚举根号 2n 中的 k1 与 k2 ,判断是否互质,但由于本题时限仅为 500ms,会导致超时。
4、分析一下,如果 k1 与 k2 为 2n 的因数且它们互质,当且仅当 k1 与 k2 各不含有相同的 2n的质因子,故可枚举 2n 的所有质因子,将某个或某些质因子只放在
k1 或 k2 当中,那么它们就互质了。
比如 36 质因式分解为:2 * 2 * 3 * 3 ,质因子为 2 和 3,可以将 2 全部归于 k1 ,剩下的全部归于 k2 ,那么 k1 = 2 * 2 = 4 ,k2 = 3 * 3 = 9 ,它们互质。
注意:
对一式扩欧求解时,需要注意他的第二项系数为负的,之前说负号先给到 a ,然后再以系数为 k2 、 k1 时求得解,得出来的解 a 按理是需要取相反数的。
其次,由于得出来的 -a 不一定是最小正整数解,故需要对 k2/g 取余,这里的 g 为 1 ,故对 k2 取余即可。若结果为负数,需要加上 k2/g 变为最小正整数解。
(该题求的是不定方程的第二项 y ,若要求不定方程的第一项 x 的最小正数解,需要对 (第二项的系数)/g 取余得到,详见可结合我的 另一篇文章 ,最底下有方程组与解释 )
代码如下:
#include
#include
#include