莫比乌斯反演

根据约数和个数公式

$ans = \sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{x|i}\sum_{y|j}{[gcd(i, j)==1]}$

交换枚举顺序

$ans = \sum_{x=1}^{n}\sum_{y=1}^{n}{[\frac{n}{x}][\frac{n}{y}]*[gcd(x, y)==1]}$

$=\sum_{x=1}^{n}\sum_{y=1}^{n}{[\frac{n}{x}][\frac{n}{y}]\sum_{d|x,y}{\mu(d)}}$

再交换枚举顺序

$=\sum_{d=1}^{n}{\mu(d)\sum_{i=1}^{\frac{n}{d}}{\frac{n}{di}}\sum_{j=1}^{\frac{n}{d}}{\frac{n}{dj}}}$

设$f(n)=\sum_{i=1}^{n}{\frac{n}{i}}$

那么$=\sum_{d=1}^{n}{\mu(d)f(\frac{n}{d})^{2}}$

这就可以分块求了,$\mu$用杜教筛求,$f$用二次分块

反演就是不断交换求和顺序或者改变枚举变量

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
const int N = 1e7 + , P = 1e9 + ;
int n;
ll ans;
int p[N], mark[N], mu[N];
map<int, ll> sum_1;
void ini() {
mu[] = ;
for(int i = ; i < N; ++i) {
if(!mark[i]) {
p[++p[]] = i;
mu[i] = -;
}
for(int j = ; j <= p[] && i * p[j] < N; ++j) {
mark[i * p[j]] = ;
if(i % p[j] == ) {
mu[i * p[j]] = ;
break;
}
mu[i * p[j]] = -mu[i];
}
}
for(int i = ; i < N; ++i) {
mu[i] += mu[i - ];
}
}
ll dj_m(int n) {
if(n < N) {
return mu[n];
}
if(sum_1.find(n) != sum_1.end()) {
return sum_1[n];
}
ll ret = ;
for(int i = , j = ; i <= n; i = j + ) {
j = n / (n / i);
ret = (ret - (ll)(j - i + ) * dj_m(n / i) % P + P) % P;
}
return sum_1[n] = ret;
}
ll calc(int n) {
ll ret = ;
for(int i = , j = ; i <= n; i = j + ) {
j = n / (n / i);
ret = (ret + (ll)(n / i) * (j - i + ) % P) % P;
}
return ret;
}
int main() {
ini();
scanf("%d", &n);
for(int i = , j = ; i <= n; i = j + ) {
j = n / (n / i);
ll a = ((dj_m(j) - dj_m(i - )) % P + P) % P, b = calc(n / i);
ans = (ans + a * b % P * b % P) % P;
}
printf("%lld\n", ans);
return ;
}

bzoj4176的更多相关文章

  1. 【BZOJ4176】Lucas的数论 莫比乌斯反演

    [BZOJ4176]Lucas的数论 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)) ...

  2. BZOJ4176: Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  3. bzoj4176. Lucas的数论 杜教筛

    题意:求\(\sum_{i=1}^n\sum_{j=1}^nd(ij),d是约数个数函数\) 题解:首先有一个结论\(d(ij)=\sum_{x|i}\sum_{y|j}[(i,j)==1]\) 那么 ...

  4. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

  5. BZOJ4176 Lucas的数论 【莫比乌斯反演 + 杜教筛】

    题目 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N", ...

  6. 【BZOJ4176】Lucas的数论-杜教筛

    求$$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}f(ij)$$,其中$f(x)$表示$x$的约数个数,$0\leq n\leq 10^9$,答案膜$10^9+ ...

  7. 【BZOJ4176】 Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  8. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

    BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...

  9. SP20173 DIVCNT2 - Counting Divisors (square)

    Refer 主要思路参考了 Command_block 的题解. Description 给定 \(n\)(\(n\le 10^{10}\)),求 \[\sum_{i=1}^n\sigma_0(i^2 ...

随机推荐

  1. centOS下安装ejabberd

    #centos (安装依赖项) sudo yum -y groupinstall "Development Tools"sudo yum -y install openssl op ...

  2. SQLite 数据库安装与创建数据库

    嵌入式关系数据库 Ubuntu $ sudo apt-get install sqlite3 sqlite3-dev CentOS, or Fedora $ yum install SQLite3 s ...

  3. 将參数从PHP传递到JavaScript中

    php: //自己定义数组參数 $newarr = array('a1' => 'a1', 'a2' => 'a2', 'a3' => 'a3'); $config = CJavaS ...

  4. iOS - web自适应宽高(预设置的大小)

    //web自适应宽高 -(void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"wessd"); [ webView s ...

  5. python 基础 8.5 re 的match对象

    #/usr/bin/python #coding=utf-8 #@Time   :2017/11/18 21:49 #@Auther :liuzhenchuan #@File   :match对象.p ...

  6. scrapy架构解析

  7. 20179209课后作业之od命令重写

    一.问题描述: 1 复习c文件处理内容 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 3. main与其他分开,制作静态库和动态库 4. 编写Makefi ...

  8. Struts2常见面试点

    01.  三层和MVC的区别 http://blog.csdn.net/csh624366188/article/details/7183872 http://www.cnblogs.com/zdxs ...

  9. 卸载apache服务

    卸载服务,管理员身份运行命令行程序,输入 sc delete apache2.2

  10. 前端基础之---css

    css  介绍 css 规则有两个主要的部分构成 : 选择器  , 以及一条或多条声明. 现在的互联网前端分为三层 : ● HTML :超文本标签机语言,从语义的角度描述页面结构. ● CSS : 层 ...