luoguP4213 【模板】杜教筛(Sum)杜教筛
链接
思路
为了做hdu来学杜教筛。
杜教筛模板题。
卡常数,我加了register居然跑到不到800ms。
太深了。
代码
// luogu-judger-enable-o2
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=5000030;
int vis[_],pri[_],cnt,N,limit,mu[_];
ll phi[_];
unordered_map<int,ll> ans_phi;
unordered_map<int,ll> ans_mu;
inline void Euler() {
vis[1]=phi[1]=mu[1]=1;
for(register int i=1;i<=limit;++i) {
if(!vis[i]) pri[++cnt]=i,mu[i]=-1,phi[i]=i-1;
for(register int j=1;j<=cnt&&i*pri[j]<=limit;++j) {
vis[i*pri[j]]=1;
if(i%pri[j]==0) {
mu[i*pri[j]]=0;
phi[i*pri[j]]=phi[i]*pri[j];
break;
} else {
mu[i*pri[j]]=-mu[i];
phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
}
for(register int i=2;i<=limit;++i) mu[i]+=mu[i-1],phi[i]+=phi[i-1];
}
ll Solvephi(register int n) {
if(n<=limit) return phi[n];
if(ans_phi[n]) return ans_phi[n];
register ll tmp=1LL*n*(n+1)/2;
for(register int l=2,r;l<=n;l=r+1)
r=n/(n/l),tmp-=Solvephi(n/l)*(r-l+1);
return ans_phi[n]=tmp;
}
ll Solvemu(register int n) {
if(n<=limit) return mu[n];
if(ans_mu[n]) return ans_mu[n];
register ll tmp=1;
for(register int l=2,r;l<=n;l=r+1)
r=n/(n/l),tmp-=Solvemu(n/l)*(r-l+1);
return ans_mu[n]=tmp;
}
int main() {
int T;cin>>T;
limit=5000000;
Euler();
while(T --> 0) {
cin>>N;
printf("%lld %lld\n",Solvephi(N),Solvemu(N));
}
return 0;
}
luoguP4213 【模板】杜教筛(Sum)杜教筛的更多相关文章
- [BZOJ3944]Sum(杜教筛)
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6201 Solved: 1606[Submit][Status][Discuss ...
- 【知识总结】线性筛_杜教筛_Min25筛
首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...
- [bzoj3944] sum [杜教筛模板]
题面: 传送门 就是让你求$ \varphi\left(i\right) $以及$ \mu\left(i\right) $的前缀和 思路: 就是杜教筛的模板 我们把套路公式拿出来: $ g\left( ...
- luoguP4213 [模板]杜教筛
https://www.luogu.org/problemnew/show/P4213 同 bzoj3944 考虑用杜教筛求出莫比乌斯函数前缀和,第二问随便过,第一问用莫比乌斯反演来做,中间的整除分块 ...
- p4213 【模板】杜教筛(Sum)
传送门 分析 我们知道 $\varphi * 1 = id$ $\mu * 1 = e$ 杜教筛即可 代码 #include<iostream> #include<cstdio> ...
- P4213 【模板】杜教筛(Sum) min_25筛
\(\color{#0066ff}{ 题目描述 }\) 给定一个正整数\(N(N\le2^{31}-1)\) 求 \(ans_1=\sum_{i=1}^n\varphi(i)\) \(ans_2=\s ...
- 3944: Sum[杜教筛]
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3471 Solved: 946[Submit][Status][Discuss] ...
- 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)
题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...
- 洛谷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 ...
随机推荐
- Tomca原理分析之责任链
责任链使用位置:Container处理请求 Container处理请求是使用Pipeline-Valve管道来处理的!(Valve是阀门之意) Pipeline-Valve是责任链模式,责任链模式是指 ...
- windows上安装python2和python3虚拟环境
一.windows上安装 1.安装python 分别安装了Python2和Python3 python3.7默认安装目录 C:\Users\Administrator\AppData\Local\Pr ...
- spring 注解AOP
aspectAnnotation的切面信息,加到了AnnotationAwareAspectJAutoProxyCreator的advisorsCache属性里面去了. 解析annotationSe ...
- 此贴告诉你:为啥shell脚本人,不建议学python
py很强大,我承认.但在运维方面,py不但不强大,还有硬伤.正因为有下述硬伤,所以我们运维,还是用shell多,用py极少.我看到用shell的人很多,你建议人用python,人说py是很好,但下一秒 ...
- ubuntu16.04 下anaconda3安装教程
贴一个成功的连接: https://blog.csdn.net/u012243626/article/details/82469174
- Vue动态修改网页标题
业务需求,进入页面的时候,网页有个默认标题,加载的网页内容不同时,标题需要变更. 例:功能授权,功能授权(张三). Vue下有很多的方式去修改网页标题,这里总结下解决此问题的几种方案: 一.最笨方案 ...
- LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
题目 我是按照边进行二分的 class Solution { public: int sum[100005]; int a[305][305]; int maxSideLength(vector< ...
- 转 tty 设备读写
转自https://feng-qi.github.io/2017/05/04/how-to-read-write-to-tty-device/ <p>这是 StackExchange 上的 ...
- 简单的ALV显示例子
废话不多说,直接上傻瓜代码.归根结底,就是要将显示的字段一行一行的放入fieldcat的表里. "定义ALV数据变量 DATA: IT_FIELDCAT TYPE SLIS_T_FIELDC ...
- Windows cmd 和 PowerShell 中文乱码问题解决
临时方案: 在命令行下输入:chcp 65001 长期方案: 要修改注册表,自己网上搜吧