对自然数 x x x 定义 U ( x ) = { 0 , 1 , 2 , . . . , x } U(x)=\{0,1,2,...,x\} U ( x ) = { 0 , 1 , 2 , . . . , x } ,给定正整数 n , m n,m n , m ,求:
∑ r = 0 n − 1 ( ∑ S ⊆ U ( n m − 1 ) [ ( ∑ x ∈ S x ) m o d n = r ] ) 2 \sum_{r=0}^{n-1}(\sum_{S\subseteq U(nm-1)}[(\sum_{x\in S}x)\bmod n=r])^2
r = 0 ∑ n − 1 ( S ⊆ U ( n m − 1 ) ∑ [ ( x ∈ S ∑ x ) m o d n = r ] ) 2
答案对 998244353 998244353 9 9 8 2 4 4 3 5 3 取模,n , m ≤ 1 0 12 n,m\le 10^{12} n , m ≤ 1 0 1 2 。
多组数据,T ≤ 50 T\le 50 T ≤ 5 0 。
一个 r r r 的方案是:
∑ i = 0 n m [ i m o d n = r ] [ x i ] ∏ j = 0 n − 1 ( 1 + x j ) m \sum_{i=0}^{nm}[i\bmod n=r][x^i]\prod_{j=0}^{n-1}(1+x^j)^m
i = 0 ∑ n m [ i m o d n = r ] [ x i ] j = 0 ∏ n − 1 ( 1 + x j ) m
指数上有取模,非常难搞,但是可以联想到单位根可以做这个。
赛时想法,一个 r r r 的答案是:
[ ω n r x ] ∏ i = 0 n − 1 ( 1 + ω n x i ) m [\omega_n^{rx}]\prod_{i=0}^{n-1}(1+\omega_n^{xi})^m
[ ω n r x ] i = 0 ∏ n − 1 ( 1 + ω n x i ) m
然后我的想法是,x x x 乘上一个与 n n n 互质的数后,右边的多项式是不会变的,这样说明 gcd ( r , n ) \gcd(r,n) g cd( r , n ) 相同的 r r r 的答案是相同的。
然后带入 x x x 为一些具体的值可以得到一些 r r r 的答案的组合,不过似乎不太可做。
正解没有用这样的生成函数推导,直接绕开了「求出每个 r r r 的答案」这一步。
令 ∑ x = s \sum x=s ∑ x = s 的方案数为 a s a_s a s ,然后直接单位根反演:
∑ i = 0 n m − 1 a i [ i m o d n = r ] = 1 n ∑ i = 0 n m − 1 a i ∑ j = 0 n − 1 ω n j ( i − r ) = 1 n ∑ j = 0 n − 1 ω n − j r ∑ i = 0 n m − 1 a i ω n i j = 1 n ∑ j = 0 n − 1 ω n − j r ∏ i = 0 n − 1 ( 1 + ω n i j ) m \sum_{i=0}^{nm-1}a_i[i\bmod n=r]=\frac{1}{n}\sum_{i=0}^{nm-1}a_i\sum_{j=0}^{n-1}\omega_n^{j(i-r)}\\
=\frac{1}{n}\sum_{j=0}^{n-1}\omega_n^{-jr}\sum_{i=0}^{nm-1}a_i\omega_{n}^{ij}\\
=\frac{1}{n}\sum_{j=0}^{n-1}\omega_n^{-jr}\prod_{i=0}^{n-1}(1+\omega_n^{ij})^m\\
i = 0 ∑ n m − 1 a i [ i m o d n = r ] = n 1 i = 0 ∑ n m − 1 a i j = 0 ∑ n − 1 ω n j ( i − r ) = n 1 j = 0 ∑ n − 1 ω n − j r i = 0 ∑ n m − 1 a i ω n i j = n 1 j = 0 ∑ n − 1 ω n − j r i = 0 ∏ n − 1 ( 1 + ω n i j ) m
设 W ( j ) = ∏ i = 0 n − 1 ( 1 + ω n i j ) m W(j)=\prod_{i=0}^{n-1}(1+\omega_n^{ij})^m W ( j ) = ∏ i = 0 n − 1 ( 1 + ω n i j ) m ,然后直接写答案的式子:
1 n 2 ∑ r = 0 n − 1 ∑ u = 0 n − 1 ∑ v = 0 n − 1 ω n − ( u + v ) r W ( u ) W ( v ) = 1 n 2 ∑ u = 0 n − 1 ∑ v = 0 n − 1 W ( u ) W ( v ) ∑ r = 0 n − 1 ω n − ( u + v ) r \frac{1}{n^2}\sum_{r=0}^{n-1}\sum_{u=0}^{n-1}\sum_{v=0}^{n-1} \omega_{n}^{-(u+v)r}W(u)W(v)\\
= \frac{1}{n^2}\sum_{u=0}^{n-1}\sum_{v=0}^{n-1} W(u)W(v)\sum_{r=0}^{n-1}\omega_{n}^{-(u+v)r}
n 2 1 r = 0 ∑ n − 1 u = 0 ∑ n − 1 v = 0 ∑ n − 1 ω n − ( u + v ) r W ( u ) W ( v ) = n 2 1 u = 0 ∑ n − 1 v = 0 ∑ n − 1 W ( u ) W ( v ) r = 0 ∑ n − 1 ω n − ( u + v ) r
此时直接写答案的关键一步:右边 ∑ r = 0 n − 1 ω n − ( u + v ) r \sum_{r=0}^{n-1}\omega_{n}^{-(u+v)r} ∑ r = 0 n − 1 ω n − ( u + v ) r 只有当 u + v ∣ n u+v|n u + v ∣ n 时不为 0 0 0 。
= 1 n ∑ u = 0 n − 1 W ( u ) W ( n − u ) =\frac{1}{n}\sum_{u=0}^{n-1} W(u)W(n-u)
= n 1 u = 0 ∑ n − 1 W ( u ) W ( n − u )
只要算 W ( u ) W(u) W ( u ) 就行了,容易发现 W ( u ) W(u) W ( u ) 的取值只和 gcd ( u , n ) \gcd(u,n) g cd( u , n ) 有关,因此直接求 d ∣ n d|n d ∣ n 的 W ( d ) W(d) W ( d ) 。
W ( d ) = ∏ i = 0 n / d − 1 ( 1 + ω n / d i ) m d W(d)=\prod_{i=0}^{n/d-1}(1+\omega_{n/d}^{i})^{md}
W ( d ) = i = 0 ∏ n / d − 1 ( 1 + ω n / d i ) m d
此时需要解决的是 F ( p ) = ∏ i = 0 p − 1 ( 1 + ω p i ) F(p)=\prod_{i=0}^{p-1}(1+\omega_{p}^i) F ( p ) = ∏ i = 0 p − 1 ( 1 + ω p i ) 。
我赛时的神秘做法也是需要这个的,因此打表之后发现 F ( p ) = 1 + ( − 1 ) p + 1 F(p)=1+(-1)^{p+1} F ( p ) = 1 + ( − 1 ) p + 1 。
也有很优雅的证明,考虑单位根本质是 x n = 1 x^n=1 x n = 1 的根。
x n − 1 = ∏ i = 0 n − 1 ( x − ω n i ) x^n-1=\prod_{i=0}^{n-1}(x-\omega_{n}^i)
x n − 1 = i = 0 ∏ n − 1 ( x − ω n i )
带入 x = − 1 x=-1 x = − 1 。
( − 1 ) n − 1 = ( − 1 ) n ∏ i = 0 n − 1 ( 1 + ω n i ) (-1)^n-1=(-1)^n \prod_{i=0}^{n-1} (1+\omega_{n}^i)
( − 1 ) n − 1 = ( − 1 ) n i = 0 ∏ n − 1 ( 1 + ω n i )
移项就证完了。
又因为上面的 gcd ( u , n ) = gcd ( n − u , n ) \gcd(u,n)=\gcd(n-u,n) g cd( u , n ) = g cd( n − u , n ) ,因此得到:
1 n ∑ u = 0 n − 1 W ( u ) W ( n − u ) = 1 n ∑ u = 0 n − 1 W ( u ) 2 = 1 n ∑ d ∣ n φ ( d ) W ( n / d ) 2 = 1 n ∑ d ∣ n φ ( d ) F ( d ) 2 m n / d = 1 n ∑ 2 ∤ d , d ∣ n φ ( d ) 2 2 m n / d \frac{1}{n}\sum_{u=0}^{n-1} W(u)W(n-u)\\
=\frac{1}{n}\sum_{u=0}^{n-1} W(u)^2\\
=\frac{1}{n}\sum_{d|n}\varphi(d)W(n/d)^2\\
=\frac{1}{n}\sum_{d|n}\varphi(d)F(d)^{2mn/d}\\
=\frac{1}{n}\sum_{2\nmid d,d|n}\varphi(d)2^{2mn/d}
n 1 u = 0 ∑ n − 1 W ( u ) W ( n − u ) = n 1 u = 0 ∑ n − 1 W ( u ) 2 = n 1 d ∣ n ∑ φ ( d ) W ( n / d ) 2 = n 1 d ∣ n ∑ φ ( d ) F ( d ) 2 m n / d = n 1 2 ∤ d , d ∣ n ∑ φ ( d ) 2 2 m n / d
因此直接搜索出所有因数,同时求出其欧拉函数,复杂度 O ( T ( n + d ( n ) log n ) ) \mathcal O(T(\sqrt n+d(n)\log n)) O ( T ( n + d ( n ) log n ) ) 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 void Yui_Yagi () { ll n, m; cin >> n >> m; V<Int> vec; ll T = n; for (int i = 2 ; 1ll * i * i <= T; i++) { int s = 0 ; for (; T % i == 0 ; s++) T /= i; if (s && i > 2 ) vec.pb ({i, s}); } while (T % 2 == 0 ) T /= 2 ; if (T > 1 ) vec.pb ({T, 1 }); mint res = 0 ; auto dfs = [&](auto lf, int x, ll d, ll ph) -> void { if (x == sz (vec)) { res += (mint)ph * (2 _m).pow (2 * m % (P - 1 ) * (n / d % (P - 1 )) % (P - 1 )); return ; } For (i, 0 , vec[x].se) { lf (lf, x + 1 , d, ph); if (i < vec[x].se) { d *= vec[x].fi, ph *= vec[x].fi; if (!i) ph = ph / vec[x].fi * (vec[x].fi - 1 ); } } }; dfs (dfs, 0 , 1 , 1 ); cout << res / n << endl; }