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)唯一分解然后代回去算就行了。

  • 相关阅读:
    python正文(两)
    mysql计算指定的时间TPS
    wamp无法登录phpmyadmin问题
    BZOJ 1150 CTSC2007 数据备份Backup 堆+馋
    学习计划
    improper Advertising identifier [IDFA] Usage. Your app contains the Advertising Identifier [IDFA] AP
    让你的字ScrollView、ListView充分伸展
    HDU1237 简单的计算器 【堆】+【逆波兰式】
    Android硬件加速
    搭建MyBatis框架
  • 原文地址:https://www.cnblogs.com/Kylin-xy/p/tijie-JZPKIL.html
Copyright © 2011-2022 走看看