zoukankan      html  css  js  c++  java
  • Noi2016 循环之美

    题意相当于求如下式子 $$ sum _{i=1}^{n} sum_{j=1}^{m} [gcd(i,j)=1][gcd(j,k)=1] \ k <= 1000 ; n,m <= 10^9 $$ 化简一下: $$ egin{aligned} & sum_d mu(d) * sum _{j=1}^{lfloor frac{m}{d} floor} [gcd(d*j,k)=1] \ & = sum_d mu(d)[gcd(d,k)=1] * sum _{j=1}^{lfloor frac{m}{d} floor} [gcd(j,k)=1] end{aligned} $$ 发现我们需要求两个前缀和 $$ f(i) = sum_{i=1}^{n} mu(i)[gcd(i,k)=1] $$ $$ g(i) = sum_{i=1}^{n}[gcd(i,k)=1] $$ 求g枚举k的约数就行了 具体如下 $$ egin{aligned} g(i) & = sum_{i=1}^{n}[gcd(i,k)=1] \ & = sum _{d|k} mu(d) {lfloor frac{n}{d} floor} end{aligned} $$ 现在考虑如何求f,多加一个元 $$ egin{aligned} S(i,k) & = sum_{i=1}^{n} mu(i)[gcd(i,k)=1] \ & =sum _{d|k} mu(d) * sum _{j=1}^{{lfloor frac{n}{d} floor}} mu (d*j) \ & =sum _{d|k} mu(d) * sum _{j=1}^{{lfloor frac{n}{d} floor}} mu (d) * mu(j) [gcd(d,j)=1] \ & =sum _{d|k} mu(d)^2 * sum _{j=1}^{{lfloor frac{n}{d} floor}}mu(j) [gcd(d,j)=1] \ & =sum _{d|k} mu(d)^2 * S({{lfloor frac{n}{d} floor}},d) end{aligned} $$ 边界是$k=1$的时候,这个时候可以杜教筛求解。 然后这题就完了
  • 相关阅读:
    静态代码块执行顺序
    静态代码块
    方法的定义(实例与静态)
    变量的声明(实例与静态)
    static关键字
    封装2
    线程1
    数组元素的查找——二分法查找
    docker介绍、安装及要素讲解
    渗透测试基础
  • 原文地址:https://www.cnblogs.com/weiyanpeng/p/10982210.html
Copyright © 2011-2022 走看看