题目描述
有一个密码箱, 0 0 0到 n − 1 n-1 n−1中的某些整数是它的密码。且满足:如果a和b都是它的密码,那么 ( a + b ) (a+b)%n (a+b)也是它的密码(a,b可以相等,%表示整除取余数),某人试了 k k k次密码,前 k − 1 k-1 k−1次都失败了,最后一次成功了。
问:该密码箱最多有多少不同的密码。
输入
第一行两个整数分别表示n,k( 1 ≤ k ≤ 250000 , k ≤ n ≤ 1 0 14 1≤k≤250000,k≤n≤10^{14} 1≤k≤250000,k≤n≤1014)。第二行为k个用空格隔开的非负整数,表示每次试的密码。数据保证存在合法解。
输出
输出一行一个数,表示结果。
题解:
解决这个问题之前,我们首先来学习扩展欧几里得算法。大佬自动忽略
结论:若 a ∗ x + b ∗ y = c a*x+b*y=c a∗x+b∗y=c有解,设 t = g c d ( a , b ) , 则 c 除 以 t 取 余 = 0 t=gcd(a,b),则c除以t取余=0 t=gcd(a,b),则c除以t取余=0。注意,这里的x和y不一定是正整数,也有可能是0或者负数。
边界情况:当 b = 0 b=0 b=0时,