传送门
思路:
我们知道b = [a, a + m], 我们需要满足Gcd(a, m) = Gcd(b, m), 假设g = Gcd(a, m),那么Gcd(a, m) = Gcd(a + k * g, m)(a + k * g ∈ b),两边同除以g,
Gcd(a / g, m / g) = Gcd(a / g + k, m / g) = g / g = 1 < ====> Gcd(b / g, m / g) = 1, 说明我们需要在b / g = [(a + g - 1) / g, (a + m) / g] 找到与 m / g互质的个数即可。
这里需要用到欧拉函数的相关知识,不会的学要自己学习。这样的话我们只需要求出( b/g右区间到1与m/g互质的个数) - (b/g左区间减一与m/g互质的个数)即可
#include
#include
#include
#include
#include
#include <string>
#include