Front:做第二个专题的时候,出现了一个弱智的盲区
显然是正确的,是按照d比x多出的质因子集合进行容斥的。
「yydgcd」
设$$f(s)=sumlimits_{kin prime} mu(frac{s}{k})$$
则可以埃筛求出(f()),然后取前缀和,然后整除分块
「数表」
设(f(x)=sumlimits{k|i}k)
为积性函数,可以线筛
考虑p的次幂被加入的次数
然后
则可以将询问离线,从小到大解决所有的g,复杂度nlogn
「DZYlovesmath」
考察(F(s)=sumlimits_{k|s} f[k]*mu(frac{s}{k})),当(mu(frac{s}{k})!=0)时,(f[k])只有(f[s],f[s]-1)两种取值
考察(f[s]*sumlimits_{k|s}mu(k)=f[s]*[s==1]),一定为0
设(s的质因子中次数为f[s]的集合为M),由于(f[k]==f[s]-1),(frac{s}{k})中必然包含M中所有元素一次且仅一次
枚举其它因子包含在(frac{s}{k})中的数量,设s含有的质因数共c种
是一行组合数奇加偶减的形式,当(c-|M|>0)时显然为0
否则(F(s)=-(-1)^{|M|}=(-1)^{|M|+1})
于是愉快地线性求出了(F()),其余整除分块处理。
「约数个数和」
注意一个事实
考虑((i*j))的约数d中每个质因子p的次数c_d,设((i*j))中的次数为(c_t),(i)中的次数为(c_i)
规定若(c_d<=c_i),则x中p的次数为(c_d),y中不含p这一因子,则会作出应有的一个贡献
若(c_d>c_i),则x中不含p这一因子,y中含p的次数为(c_d-c_i),也会作出应有的一个贡献
质因子之间互相独立,故上式正确
「数字表格」「于神之怒加强版」「jzptab」的推导过程与上边几个十分相似..而且要更简单一点
「一个人的数论」
自然数幂和拆成组合数和伯努利数,由
原式变为
(sumlimits_{j|n}mu(j)j^{i-1})为积性函数,可以对每个质因子快速算出并相乘得到n的函数值
而外层d枚举即可
「GuGuFish」
我说这题目名怎么这么耳熟原来我去一家重庆咕咕鱼吃过鱼。。。
那么把柿子搞开
设(f(n)=prodlimits_{p|n&pin Prime} frac{p}{p-1}),那么这个函数可以线筛,我们先不管他
设(F(n)=sumlimits_{g|n}f(g)*mu(frac{n}{g})),考察这个函数,设其有平方因子(p^2),根据(frac{n}{g})中p的次数分情况讨论
(!(p|frac{n}{g})),设此时(sumlimits_{g|n}f(g)*mu(frac{n}{g})=Val)。
(p|frac{n}{g}&!(p^2|frac{n}{g})),易知这一部分的(g)中仍含有p因子,即(f(g))不变
而(mu(frac{n}{g}))中全部增加了p这一因子,变为相反数,则(sumlimits_{g|n}f(g)*mu(frac{n}{g})=-Val)
(p^2|frac{n}{g}),则(mu(frac{n}{g})=0)
则(F(n)=Val+(-Val)+0=0),得到结论:若(mu(n)==0)则(F(n)==0)
此时(F())函数可以用线筛非常简单地求出了,再加上整除分块就行了
「TrickGCD」
利用调和级数,开值域桶,枚举+组合数求方案数,用Front求解。
「Battlestation Operational」
先把柿子套路展开,然后发现只需要处理函数(f(n)=sumlimits_{i=1}^n sumlimits_{j=1}^i lceil frac{i}{j}
ceil)再上整除分块就行了
也就是(h(n)=sumlimits_{i=1}^n lceil frac{n}{i}
ceil)的前缀和
向上取整很别扭,我们先求向下取整的(g(n)=sumlimits_{j=1}^i lfloor frac{n}{i}
floor)
可以递推,n增加1后,所有结果不会变小,除了不变的,会有(d(n))个被除数由于成为了n的因子而使商增加1
得到(g(n)=g(n-1)+d(n)),只差最后一步将(g)转化为(h)了
由于(lceil frac{a}{b}
ceil=lfloor frac{a-1}{b}
floor+1)
故(h(n)=sumlimits_{i=1}^n lfloor frac{n-1}{i}+1
floor)
完美。
「GCD of Sequence」
考虑枚举d计算序列gcd是d的倍数的方案数,然后用Front求解
值不是d的倍数的位置必须替换,选择有(lfloor frac{n}{d}
floor)种
其余任意替换,但不能替换成自己,选择(lfloor frac{n}{d}-1
floor)种乘上组合数。
「bookshelf」
一些神奇的结论。
1.(gcd(fib(i),fib(i+1))==1)
(egin{aligned}\
gcd(f(i),f(i+1))&=gcd(f(i),f(i)+f(i-1))\
&=gcd(f(i-1),f(i))\
&=...\
&=gcd(f(1),f(2))=1
end{aligned})
2.(gcd(fib(i),fib(j))==fib(gcd(i,j)),(i>j))
(egin{aligned}\
gcd(f(i),f(j))&=gcd(f(i-1)+f(i-2),f(j))\
&=gcd(2f(i-2)+f(i-3),f(j))\
&=gcd(3f(i-3)+2f(i-4),f(j))\
&=gcd(f(j)f(i-j+1)+f(j-1)f(i-j))\
&=gcd(f(j-1)f(i-j),f(j))\
&=gcd(f(i-j),f(j))\
&=...\
&=gcd(f(i\%j),f(j))\
&=f(gcd(i,j))
end{aligned}),
3.(gcd(2^i-1,2^j-1)=2^{gcd(i,j)}-1,(i>j))
(egin{aligned}\
gcd(2^i-1,2^j-1)&=gcd(2^{i-j}(2^j-1)+2^{i-j}-1,2^j-1)\
&=gcd(2^{i-j}-1,2^j-1)\
&=...\
&=gcd(2^{i\%j}-1,2^j-1)\
&=2^{gcd(i,j)}-1\
end{aligned})
用各种性质qj化一下柿子,只需要对每个d求(gcd(cnt_i)==d)的方案数就好了
到这里用组合数乱搞就行了
「Neko and function」
设函数(f(n,k))为把n依次除以k个不为1的数变为1的方案数,不同除数不同顺序算不同方案
给定k求它前n项的和,(n<=2^30)
为了方便把不为1的限制去掉,设(g(n,k))为可以为1
枚举除数的哪些位置不为1
由于(g(k)=sumlimits_{i=1}^k C_k^if(i))
(f(k)=sumlimits_{i=1}^k (-1)^{k-i}C_k^ig(i))
这是二项式反演qwq
根据g的定义,(g(n,k)=sumlimits_{d|n} g(d,k-1))
然后就可以杜教筛前缀和..递归30层,每层长的一样,复杂度(30*n^{frac{2}{3}})