P2568 莫比乌斯反演+整除分块
#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 莫比乌斯反演+整除分块的更多相关文章
- [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 ...
- Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...
- 莫比乌斯反演&整除分块学习笔记
整除分块 用于计算$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i$之类的函数 整除的话其实很多函数值是一样的,对于每一块一样的商集中处理即可 若一个商的左边界为l,则右 ...
- 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
- [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)
[POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...
- 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块
https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...
- [国家集训队] 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} ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
- 洛谷 - UVA11424 - GCD - Extreme (I) - 莫比乌斯反演 - 整除分块
https://www.luogu.org/problemnew/show/UVA11424 原本以为是一道四倍经验题来的. 因为输入的n很多导致像之前那样 \(O(n)\) 计算变得非常荒谬. 那么 ...
随机推荐
- 使用AES加密的勒索类软件分析报告
报告名称: 某勒索类软件分析报告 作者: 李东 报告更新日期: 样本发现日期: 样本类型: 样本文件大小/被感染文件变化长度: 样本文件MD5 校验值: da4ab5e31793 ...
- 第一周博客之二---OA项目环境搭建及开发包部署
OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...
- LeetCode算法历程-01
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- python3.5+selenium3环境搭建
windows环境下的操作(例子中的浏览器以火狐浏览器为例,IE和谷歌与此浏览器同理): 准备工具如下: 下载python[python开发环境]:http://python.org/getit/ 下 ...
- logging日志——Basic Logging Tutorial
在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有: filename,filemode,datefmt,format,level,strea ...
- shell练习题4
需求如下: 系统logrotate工具,可以完成日志切割.归档.写一个shell脚本实现类似功能. 举例:假如服务的输出日志是1.log,要求每天归档一个,1.log第二天就变成1.log.1, 第三 ...
- mysql 的存储过程_多字段
mysql 的存储过程 一.准备工作 新建一个表 /*Navicat MySQL Data Transfer Source Server : localhost_3306Source Server V ...
- CRC8反转校验
最近在做项目遇到一个问题,就是需要对数据进行CRC8校验,多项式是 X7+X6+X5+X2+1,对应的二进制表达是 11100101,但是因为传输反转所以我们这里的多项式二进制表达方式 为 10100 ...
- java面向对象编程--Josephu问题(丢手帕问题)
Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推 ...
- C16记技术服务支持
1.首页笔记:可以通过点击加号添加笔记的分类,还可以查看最近的10条笔记 2.图形:可以通过查看笔记的比例来分析自己最近的状况 3.快速添加笔记:点击添加笔记能够直接进行笔记 4.时间轴:能够通过文字 ...