kz

jzoj 6272. 2019.8.4【NOIP提高组A】整除 (division)

会有一股神秘感。 提交于 2019-11-27 07:12:58
Description 详见OJ Solution 先想到了50分暴力,又想到了对于每个质数分开求答案,最后相乘,结果打挂。 正解根据中国剩余定理,可以对于每个质数分开求。 \((x^m-x)\)%\(n=0\) 由于\(n\)有多个不同的质数组成,所以我们可以用中国剩余定理来分解成\(c\)个方程。 然后得到\(x^m-x≡0(mod~p)\)(\(c\)个方程) 我们对于每个都用50分暴力来求,最后答案乘起来即可。 时间\(O(T*c*t*logm)\),80分。 由于有个\(log\),我们考虑优化。 根据积性筛(欧拉筛),我们可以接近\(O(n)\)求出\(1\)~\(n\)的\(m\)次方,在%\(n\)的意义下。 质数直接用\(ksm\)求出\(x^m\),而合数则可以用其质数\(y\)的值和\(x/y\)的值相乘求出。 这样消去\(log\),可以AC了。 有人用\(O(c×logpi)\)的时间过了这题。 在线%%%dalao Code #include <cstdio> #include <cstring> #define N 51 #define ll long long #define mo 998244353 #define mem(x, a) memset(x, a, sizeof x) #define fo(x, a, b) for (int x = a