【杂题】【数论】[JZOJ5134] 三元组(无实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hzj1054689699/article/details/81914478

Description

i = 1 A j = 1 B k = 1 C [ ( i , j ) = 1   a n d   ( j , k ) = 1   a n d   ( i , k ) = 1 ]

A,B,C<=50000

Solution

考虑枚举一个,设函数

f ( i ) = j = 1 B k = 1 C [ ( i , j ) = 1 ] [ ( j , k ) = 1 ] [ ( i , k ) = 1 ]

把(j,k)=1的限制用莫比乌斯反演消掉
= d = 1 m i n ( B , C ) μ ( d ) j = 1 B d k = 1 C d [ ( i , j d ) = 1 ] [ ( i , k d = 1 ) ]

= d = 1 m i n ( B , C ) μ ( d ) [ ( i , d ) = 1 ] j = 1 B d k = 1 C d [ ( i , j ) = 1 ] [ ( i , k = 1 ) ]

发现后面两个求和互不干扰,只和d,i有关,那么我们可以分开来算,最后再乘积

= d = 1 m i n ( B , C ) μ ( d ) [ ( i , d ) = 1 ] ( j = 1 B d [ ( i , j ) = 1 ] ) ( k = 1 C d [ ( i , k = 1 ) ] )

那么对d分块后,问题转化成快速求两个函数

G ( i , n ) = j = 1 n [ ( i , j ) = 1 ]

H ( i , n ) = j = 1 n [ ( i , j ) = 1 ] μ ( j )

考虑G
我们发现最大公因数只与质因子种类有关,因此我们不妨直接假定 μ 2 ( i ) = 1 (即每个质因子指数都为1),如果存在大于1的质因子它的函数值是和=1的情况相同的,直接记一下就好了。

那我们随便找到i的一个质因子p
大力推式子

G ( i , n ) = j = 1 n [ ( i , j ) = 1 ]

= j = 1 n [ ( p , j ) = 1 ] [ ( i / p , j ) = 1 ]

= j = 1 n ( 1 [ p | j ] ) [ ( i / p , j ) = 1 ]

= j = 1 n [ ( i / p , j ) = 1 ] j = 1 n p [ ( i / p , p j ) = 1 ]

又因为 μ 2 ( i ) = 1 ,因此 ( i / p , p ) 恒为1,那么
= j = 1 n [ ( i / p , j ) = 1 ] j = 1 n p [ ( i / p , j ) = 1 ]

= G ( i / p , n ) G ( i / p , n p )

H是类似的

H ( i , n ) = j = 1 n [ ( i , j ) = 1 ] μ ( j )

= j = 1 n [ ( p , j ) = 1 ] [ ( i / p , j ) = 1 ] μ ( j )

= j = 1 n ( 1 [ p | j ] ) [ ( i / p , j ) = 1 ] μ ( j )

= j = 1 n [ ( i / p , j ) = 1 ] μ ( j ) j = 1 n p [ ( i / p , p j ) = 1 ] μ ( p j )

我们知道p与j不互质时 μ ( p j ) = 0
那么
= j = 1 n [ ( i / p , j ) = 1 ] μ ( j ) j = 1 n p [ ( i / p , j ) = 1 ] [ ( p , j ) = 1 ] μ ( p ) μ ( j )

= H ( i / p , n ) μ ( p ) H ( i , n p )

= H ( i / p , n ) + H ( i , n p )

第二维实际上只用记对B,C分块后的剩下的根号个位置即可。
注意采用寻址优化(枚举顺序,数组顺序)

Code

因为博主比较懒,没有去写。。

猜你喜欢

转载自blog.csdn.net/hzj1054689699/article/details/81914478