[NOI2016]循环之美

Posted StaroForgin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NOI2016]循环之美相关的知识,希望对你有一定的参考价值。

循环之美

题解

我们记 n , m , K n,m,K n,m,K对应的答案为 f ( n , m , K ) f(n,m,K) f(n,m,K),显然有,
f ( n , m , K ) = ∑ x = 1 n ∑ y = 1 m [ ( x , y ) = 1 ] [ y ∣ K k − 1 ] = ∑ x = 1 n ∑ y = 1 m [ ( x , y ) = 1 ] [ K k ≡ 1 m o d    y ] f(n,m,K)=\\sum_x=1^n\\sum_y=1^m[(x,y)=1][y|K^k-1]\\\\ =\\sum_x=1^n\\sum_y=1^m[(x,y)=1][K^k\\equiv 1\\mod y] f(n,m,K)=x=1ny=1m[(x,y)=1][yKk1]=x=1ny=1m[(x,y)=1][Kk1mody]由欧拉降幂可知,当且仅当 ( K , y ) = 1 (K,y)=1 (K,y)=1时,存在 [ K k ≡ 1 m o d    y ] [K^k\\equiv 1\\mod y] [Kk1mody],所以该条件可以等价于 [ ( K , y ) = 1 ] [(K,y)=1] [(K,y)=1],有
f ( n , m , k ) = ∑ x = 1 n ∑ y = 1 m [ ( x , y ) = 1 ] [ ( K , y ) = 1 ] = ∑ x = 1 n ∑ y = 1 m [ ( x , y ) = 1 ] ∑ d ∣ ( y , K ) μ ( d ) = ∑ d = 1 K μ ( d ) ∑ x = 1 n ∑ y = 1 ⌊ m d ⌋ [ ( x , d y ) = 1 ] = ∑ d ∣ K μ ( d ) ∑ y = 1 ⌊ m d ⌋ ∑ x = 1 n [ ( y , x ) = 1 ] [ ( d , x ) = 1 ] = ∑ d ∣ K μ ( d ) f ( ⌊ m d ⌋ , n , d ) f(n,m,k)=\\sum_x=1^n\\sum_y=1^m[(x,y)=1][(K,y)=1]\\\\ =\\sum_x=1^n\\sum_y=1^m[(x,y)=1]\\sum_d|(y,K)\\mu(d)\\\\ =\\sum_d=1^K\\mu(d)\\sum_x=1^n\\sum_y=1^\\lfloor\\fracmd\\rfloor[(x,dy)=1]\\\\ =\\sum_d|K\\mu(d)\\sum_y=1^\\lfloor\\fracmd\\rfloor\\sum_x=1^n[(y,x)=1][(d,x)=1]\\\\ =\\sum_d|K\\mu(d)f(\\lfloor\\fracmd\\rfloor,n,d) f(n,m,k)=x=1ny=1m[(x,y)=1][(K,y)=1]=x=1ny=1m[(x,y)=1]d(y,K)μ(d)=d=1Kμ(d)x=1ny=1dm[(x,dy)=1]=dKμ(d)y=1dmx=1n[(y,x)=1][(d,x)=1]=dKμ(d)f(dm,n,d)
显然是可以递归求解的,我们需要算一下的就是边界的情况。
首先, f ( 0 , m , k ) f(0,m,k) f(0,m,k) f ( n , 0 , k ) f(n,0,k) f(n,0,k)都应该是 0 0 0,这是显然的,也就是前两维到边界的情况,避免其 k k k一直不变。
我们主要减少的其实还是 k k k,也就是说我们大部分边界情况都是 f ( n , m , 1 ) f(n,m,1) f(n,m,1)的模样,考虑这怎么计算。
f ( n , m , 1 ) = ∑ x = 1 n ∑ y = 1 m [ ( x , y ) = 1 ] = ∑ d = 1 μ ( d ) ⌊ n d ⌋ ⌊ m d ⌋ f(n,m,1)=\\sum_x=1^n\\sum_y=1^m[(x,y)=1]\\\\ =\\sum_d=1\\mu(d)\\lfloor\\fracnd\\rfloor\\lfloor\\fracmd\\rfloor f(n,m,1)=x=1ny=1m[(x,y)=1]=d=1μ(d)dndm显然可以通过整除分块加杜教筛快速求出,杜教筛是用来算 μ \\mu μ的前缀和的。
由于我们这里要对两个数整除分块,杜教筛记忆化的标号可以建议使用 ⌊ n d ⌋ + ⌊ m d ⌋ \\lfloor\\fracnd\\rfloor+\\lfloor\\fracmd\\rfloor dn+dm来代替,因为这肯定是一个增函数,且我们整除分块每次正好会让其中一个改变。
我们记 g ( n ) = ∑ i = 1 n μ ( i ) g(n)=\\sum_i=1^n\\mu(i) g(n)=[NOI2016]循环之美

[UOJ#221][BZOJ4652][Noi2016]循环之美

bzoj4652 [NOI2016]循环之美

[BZOJ4652][NOI2016]循环之美

Bzoj4652: [Noi2016]循环之美

BZOJ4652 [Noi2016]循环之美 数论 + 莫比乌斯反演 + 杜教筛