zoukankan      html  css  js  c++  java
  • 题解 JZPKIL

    题意:求(sum_{i=1}^n gcd(i,n)^x lcm(i,n)^y)

    (lcm)不好搞把它拆开,令(gcd(i,n)=d)转化为下式:

    (n^y sum_{i=1}^n d^{x-y} i^y)

    那么(n^y)就是常数可以暂时不管,考虑枚举(d)转化为下式:

    (sum_{d|n} d^x sum_{i=1}^{frac{n}{d}} i^y [gcd(i,frac{n}{d})==1])

    令(frac{n}{d}=m),一步反演得到:

    (sum_{d|n}d^x sum_{i=1}^m i^y sum_{k|gcd(i,m)}mu (k))

    交换枚举顺序得到:

    (sum_{d|n}d^x sum_{k|m} mu (k) sum_{k|i}^m i^y)

    然后把(k)提出:

    (sum_{d|n}d^x sum_{k|m} mu(k) k^y sum_{i=1}^{lfloor frac{m}{d} floor} i^y)

    前面提式子都把(n^y)暂时忽略掉了,现在加上,于是最终的答案式子为:

    (color{red}{n^y sum_{d|n}d^x sum_{k|m} mu(k) k^y sum_{i=1}^{frac{m}{d}} i^y})

    首先自然数的(k)次幂和是(k+1)次多项式,而多项式的每一项都是积性函数,所以答案式子可以看成积性函数的卷积。然后考虑怎么处理(sum a^b),斯特林数,拉格朗日插值,伯努利数均可。讲一下伯努利数的方法。

    伯努利数公式是这样的((B_i)表示第(i)个伯努利数):

    (sum_{i=1}^n i^k =frac{1}{k+1} sum_{j=0}^k BjC_{k+1}^j n^{k-j+1})

    然后我们把前面的提出来看成多项式系数,假设系数为(a_i),于是答案式子可以进一步化成:

    (color{red}{n^y sum_{d|n}d^x sum_{k|m} mu(k) k^y sum_{i=0}^{y}a_i (frac{m}{d})^{y-i+1}})

    由于这是积性函数可以把(n)唯一分解然后对于每个质因子进行计算,由莫比乌斯函数的性质易得知只有(k=1,k=p_i)的时候式子才不为(0),其中(p_i)表示(n)的第(i)个质因子,把(n)唯一分解然后代回去算就行了。

  • 相关阅读:
    docker 简单使用
    apache 目录网站显示indexs
    MySQL索引失效的几种情况
    mysql 基本常用语句
    UNIX 版本
    B语言的发明者 Ken Thomson & C语言的发明者Dennis Ritchie
    My SQl 积累
    C# DGV多行选择
    C#中很模糊查询DGV中数据的两种方法
    网址
  • 原文地址:https://www.cnblogs.com/Kylin-xy/p/tijie-JZPKIL.html
Copyright © 2011-2022 走看看