有 n 个数 a1...an 和 m 个数 b1...bm 和一个质数 p。 第 i 个集合是这样生成的:一开始只有一个 1。每次找集合内的一个元素 c 和一个下标 j(j∈[1,m]),若 c×abjimodp 不在集合里,则加进去。 求这 n 个集合的并集大小。 n≤1e4,m≤1e5,ai<p≤1e9,bi<1e9 时限 3s。
题解
极好的数论题。
第 i 个集合实际上是 a∑任意bi。(任意b 是指 ∑kjbj,kj∈Z) 由扩展欧拉定理,指数是模 p−1 意义下的。设 B=gcd(b1,b2,...,bm,p−1),则 ∑任意b 等价于 kB(k∈Z)。(你可以用 polya 那套理论来理解这个道理,当只有一个 b 的时候可证它是 gcd,当有多个 b 的时候,合并两个 b 可以看作是其中一个模另一个,因此也是 gcd。)
底数不同于是用原根来表示,设 ai=gAi,则第 i 个集合表示为 gAikB。 由于 B 是定值,Ai 可以直接视为 Ai×B,也相当于一开始把 ai 视为 aBi。那么现在第 i 个集合就相当于 gkAi。 同理,设 A′i=gcd(Ai,p−1),则第 i 个集合相当于 gkA′i。