#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn=1e7+;
bool vis[maxn];
int prime[maxn];
int mu[maxn];
int sum1[maxn];
int sum2[maxn];
int tot=;
void get_mu()// mo bi su si han shu
{
mu[]=; vis[]=;
for(int i=;i<maxn;i++) // prime = 0; other = 1;
{
if(!vis[i]){ prime[++tot]=i; mu[i]=-;}
for(int j=;j<=tot&& prime[j]*i<maxn;j++)
{
vis[prime[j]*i]=;
if(i%prime[j]==)break;
mu[i*prime[j]]=-mu[i];
}
}
for(int i=;i<=tot;i++)
{
for(int j=prime[i];j<maxn;j+=prime[i])
{
sum1[j]+=mu[j/prime[i]];
}
}
//for(int i=1;i<maxn;i++) sum2[i]=sum2[i-1]+sum1[i];
}
int main()
{
get_mu();
int n; cin>>n;
LL ans=;
for(int i=;i<=n;i++)
{
ans+=1LL*(n/i)*(n/i)*sum1[i];
}
cout<<ans<<endl;
}

过度代码

整除分块  (看起来更麻烦)

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn=1e7+;
bool vis[maxn];
int prime[maxn];
int mu[maxn];
int sum1[maxn];
int sum2[maxn];
int tot=;
void get_mu()// mo bi su si han shu
{
mu[]=; vis[]=;
for(int i=;i<maxn;i++) // prime = 0; other = 1;
{
if(!vis[i]){ prime[++tot]=i; mu[i]=-;}
for(int j=;j<=tot&& prime[j]*i<maxn;j++)
{
vis[prime[j]*i]=;
if(i%prime[j]==)break;
mu[i*prime[j]]=-mu[i];
}
}
for(int i=;i<=tot;i++)
{
for(int j=prime[i];j<maxn;j+=prime[i])
{
sum1[j]+=mu[j/prime[i]];
}
}
for(int i=;i<maxn;i++) sum2[i]=sum2[i-]+sum1[i];
}
int main()
{
get_mu();
int n; cin>>n;
LL ans=;
//for(int i=1;i<=n;i++) ans+=1LL*(n/i)*(n/i)*sum1[i];
for(int l=,r;l<=n;l=r+)
{
r=n/(n/l); // l-r 区间相同值 区间值n/l
ans+=1LL*(n/l)*(n/l)*(sum2[r]-sum2[l-]);
}
cout<<ans<<endl;
}

P2568 莫比乌斯反演+整除分块的更多相关文章

  1. [P4450] 双亲数 - 莫比乌斯反演,整除分块

    模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i ...

  2. Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...

  3. 莫比乌斯反演&整除分块学习笔记

    整除分块 用于计算$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i$之类的函数 整除的话其实很多函数值是一样的,对于每一块一样的商集中处理即可 若一个商的左边界为l,则右 ...

  4. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

  5. [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)

    [POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...

  6. 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...

  7. [国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块

    考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n} ...

  8. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  9. 洛谷 - UVA11424 - GCD - Extreme (I) - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/UVA11424 原本以为是一道四倍经验题来的. 因为输入的n很多导致像之前那样 \(O(n)\) 计算变得非常荒谬. 那么 ...

随机推荐

  1. JS案例六_1:添加城市

    使用的相关知识点:对子节点的添加:document.appendClild() 文本节点的创建:document.createTextNode() 元素节点的创建:document.createEle ...

  2. JAVA同步锁机制 wait() notify() notifyAll()

    wait() notify() notifyAll() 这3个方法用于协调多个线程对共享数据的存取,所以必须在synchronized语句块中使用. wait() 必须在synchronized函数或 ...

  3. SQL server 一些小结

    数据库表常用术语 关系 关系即二维表,每一个关系都有一个关系名,就是表名记录 表中的行字段 表中的列 也称属性域 取值范围关联 不同数据库表之间的数据联系关键字 属性或属性的组合,可以用于唯一标识一条 ...

  4. socket.io 实现简易聊天

    客户端: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  5. 自学python之路(day1)

    1. 下载和安装Pycharm文本编辑器,解释器Python3 2. 了解python2和python3的不同 如输出中文时,python2需要在代码前加 # -*- encoding:utf-8 - ...

  6. 北大poj- 1008

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 80956   Accepted: 24892 D ...

  7. java 开发环境配置 安装 MyEclipse

    一.下载MyEclipse开发工具 下载地址:http://www.myeclipsecn.com 需要注册帐号,登录后点击下载

  8. 模拟ios应用加载页面

    1:设置应用程序系统主界面加载接口为空:Main interface=null; 2: 在AppDelegate实现didFinishLaunchingWithOptions方法 - (BOOL)ap ...

  9. 微信小程序 数据库指引 前端操纵数据库失败

    把注释解开后,点击添加显示失败了 看了下注解,发现是数据库权限问题, 修改一下成第一个,然后点击又失败了,多点击几下,就会成功! 哦 别忘了时刻 ctrl +s 保存,如果你习惯了idea 自动保存的 ...

  10. C#获取当前日期时间

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...