2019.02.12 bzoj3944: Sum(杜教筛)
传送门
题意:
思路:直接上杜教筛。
知道怎么推导就很简单了,注意预处理的范围。
然后我因为预处理范围不对被zxyoi教育了(ldx你这个傻×两倍常数活该被卡TLE) 喜闻乐见
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=7500005,lim=7500000;
typedef long long ll;
namespace Sieve{
int pri[N],tot=0,mu[N];
ll phi[N];
bool vis[N];
map<int,int>mpa;
map<int,ll>mpb;
inline void init(){
vis[1]=phi[1]=mu[1]=1;
for(ri i=2;i<=lim;++i){
if(!vis[i])pri[++tot]=i,phi[i]=i-1,mu[i]=-1;
for(ri j=1;j<=tot&&i*pri[j]<=lim;++j){
vis[i*pri[j]]=1;
if(i==i/pri[j]*pri[j]){
phi[i*pri[j]]=pri[j]*phi[i],mu[i*pri[j]]=0;
break;
}
phi[i*pri[j]]=(pri[j]-1)*phi[i],mu[i*pri[j]]=-mu[i];
}
}
for(ri i=2;i<=lim;++i)phi[i]+=phi[i-1],mu[i]+=mu[i-1];
}
inline int Mu(const int&x){
if(x<=lim)return mu[x];
if(mpa[x])return mpa[x];
int ret=0;
for(ri l=2,r;r<x&&l<=x;l=r+1)r=x/(x/l),ret+=Mu(x/l)*(r-l+1);
return mpa[x]=1-ret;
}
inline ll Phi(const int&x){
if(x<=lim)return phi[x];
if(mpb[x])return mpb[x];
ll ret=0;
for(ri l=2,r;r<x&&l<=x;l=r+1)r=x/(x/l),ret+=Phi(x/l)*(r-l+1);
return mpb[x]=(ll)x*((ll)x+1)/2-ret;
}
}
int main(){
freopen("lx.in","r",stdin);
Sieve::init();
int tt,n;
scanf("%d",&tt);
while(tt--)scanf("%d",&n),cout<<Sieve::Phi(n)<<' '<<Sieve::Mu(n)<<'\n';
return 0;
}
2019.02.12 bzoj3944: Sum(杜教筛)的更多相关文章
- [BZOJ3944]Sum(杜教筛)
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6201 Solved: 1606[Submit][Status][Discuss ...
- [bzoj3944] sum [杜教筛模板]
题面: 传送门 就是让你求$ \varphi\left(i\right) $以及$ \mu\left(i\right) $的前缀和 思路: 就是杜教筛的模板 我们把套路公式拿出来: $ g\left( ...
- bzoj3944: Sum 杜教筛板子题
板子题(卡常) 也可能是用map太慢了 /************************************************************** Problem: 3944 Us ...
- 3944: Sum[杜教筛]
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3471 Solved: 946[Submit][Status][Discuss] ...
- 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)
题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...
- HDU6706 huntian oy(2019年CCPC网络赛+杜教筛)
目录 题目链接 思路 代码 题目链接 传送门 思路 看到这题还比较懵逼,然后机房大佬板子里面刚好有这个公式\(gcd(a^n-b^n,a^m-b^m)=a^{gcd(n,m)}-b^{gcd(n,m) ...
- 洛谷P4213 Sum(杜教筛)
题目描述 给定一个正整数N(N\le2^{31}-1)N(N≤231−1) 求ans_1=\sum_{i=1}^n\phi(i),ans_2=\sum_{i=1}^n \mu(i)ans1=∑i=1 ...
- bzoj 3944 Sum —— 杜教筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教筛入门题! 看博客:https://www.cnblogs.com/zjp-sha ...
- BZOJ 3944: Sum [杜教筛]
3944: Sum 贴模板 总结见学习笔记(现在还没写23333) #include <iostream> #include <cstdio> #include <cst ...
随机推荐
- ssh免密钥之上厕所
ssh服务简单介绍 SSH协议框架中最主要的部分是三个协议: *传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性等的支持; *用户认证协议( ...
- PO & SO Integration By IDOC in CNABB
PO & SO Integration By IDOC in CNABB 话说博主来ABB一个多月时间了,虽然对ABB系统内的流程和配置不是很了解,但对ABB系统内使用的PO和SO通过idoc ...
- VS调试提示“无法启动程序,“...exe”。系统找不到指定文件
当VS调试提示上图所示的警告时,常用的方法是检查“项目”-“属性”-“配置属性”-“常规”-“输出目录”里的路径 项目”-“属性”-“配置属性”-“链接器”-“常规”-“输出文件”里的路径,是否一致, ...
- (转发)storm 入门原理介绍
1.hadoop有master与slave,Storm与之对应的节点是什么? 2.Storm控制节点上面运行一个后台程序被称之为什么?3.Supervisor的作用是什么?4.Topology与Wor ...
- shell脚本(二)
shell脚本(二)——变量 一.定义:用来存放各种数据,编程语言组成部分 变量的命名规则: 变量名由数字 字母下划线组成 必须以字母或者下划线开头 不能使用shell里面的关键词 ...
- List 的add()与addAll()的区别
add 是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素addAll 是传入一个List,将此List中的所有元素加入到当前List中,也就 ...
- __enter__ 和 __exit__上下文管理协议
class F: def __init__(self,n): self.n = n def __enter__(self): print('执行enter') return self def __ex ...
- 26.Hibernate-主键和映射.md
目录 1.复合主键映射 [toc] 2.集合映射 2.1Set集合 2.2其他集合 [toc] 3.集合数据的读取 [toc] 4.一对多和多对一映射 4.1概念 4.2配置和开发 4.2.1关键点 ...
- c++之&
转自www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html 一直以为&是取地址,也看到引用,但是今天才发现引用跟取址完全不是一个意思,&am ...
- html转换pdf
项目需求:移动端APP项目需要在手机上签订合同,将html转换成pdf格式的文件 解决方案:是用插件wkhtmltopdf; 记录用法:1.网址https://wkhtmltopdf.org/ 下载压 ...