[BZOJ3944]Sum(杜教筛)
3944: Sum
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 6201 Solved: 1606
[Submit][Status][Discuss]Description
Input
一共T+1行第1行为数据组数T(T<=10)第2~T+1行每行一个非负整数N,代表一组询问Output
一共T行,每行两个用空格分隔的数ans1,ans2Sample Input
6
1
2
8
13
30
2333Sample Output
1 1
2 0
22 -2
58 -3
278 -3
1655470 2HINT
Source
最基础的杜教筛。
杜教筛实际上就是这样一个式子:$$F(n)=H(n)-\sum\limits_{i=2}^{n}g(i)F(\lfloor\frac{n}{i}\rfloor)$$
设要求的是$f$的前缀和,辅助函数分别是$g$和$h$,$F$,$G$,$H$分别是三个函数的前缀和,如果能在$O(1)$的时间内求出$G$和$H$,就能在$O(n^{\frac{3}{4}})$内求出$F$。复杂度$O(\sum\limits_{i=1}^{\sqrt{n}} \sqrt{\frac{n}{i}})=O(n^\frac{4}{3})$,通过预处理前$n^{\frac{2}{3}}$个数就可以做到$O(n^{\frac{2}{3}})$了。
对于后面的$F(n)$值数组下标不可能直接记录,但是注意到我们最终需要的$F$函数值最多有$O(n^{\frac{2}{3}})$个(因为$\lfloor \frac{\lfloor\frac{a}{b}\rfloor}{c} \rfloor=\lfloor \frac{a}{bc} \rfloor$),所以对于后面的值可以把$x$存到$n/x$里。
回到这题,不要爆int就好了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; const int N=,M=;
int T,n,m,tot,p[N];
ll phi[N],mu[N],Phi[M],Mu[M];
bool vis[M]; ll getphi(int x){ if (x<=m) return phi[x]; else return Phi[n/x]; }
ll getmu(int x){ if (x<=m) return mu[x]; else return Mu[n/x]; } void solve(int x){
if (x<=m) return;
int t=n/x,lst=; ll p1=,p2=;
if (vis[t]) return;
vis[t]=; Phi[t]=(1ll*x+)*x>>; Mu[t]=;
while (lst<x){
int i=lst+; lst=x/(x/i); solve(x/i);
p1+=getphi(x/i)*(lst-i+); p2+=getmu(x/i)*(lst-i+);
}
Phi[t]-=p1; Mu[t]-=p2;
} int main(){
freopen("bzoj3944.in","r",stdin);
freopen("bzoj3944.out","w",stdout);
scanf("%d",&T); m=; phi[]=mu[]=;
rep(i,,m){
if (!phi[i]) p[++tot]=i,phi[i]=i-,mu[i]=-;
for (int j=; j<=tot && i*p[j]<=m; j++)
if (i%p[j]==) { phi[i*p[j]]=p[j]*phi[i]; mu[i*p[j]]=; break; }
else phi[i*p[j]]=(p[j]-)*phi[i],mu[i*p[j]]=-mu[i];
}
rep(i,,m) phi[i]=phi[i-]+phi[i],mu[i]=mu[i-]+mu[i];
while (T--){
scanf("%d",&n); memset(vis,,sizeof(vis));
if (n<=m) printf("%lld %lld\n",phi[n],mu[n]);
else solve(n),printf("%lld %lld\n",Phi[],Mu[]);
}
return ;
}
[BZOJ3944]Sum(杜教筛)的更多相关文章
- [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})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...
- 洛谷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 ...
- 【BZOJ3944】Sum(杜教筛)
[BZOJ3944]Sum(杜教筛) 题面 求\[\sum_{i=1}^n\mu(i)和\sum_{i=1}^n\phi(i)\] 范围:\(n<2^{31}\) 令\[S(n)=\sum_{i ...
- BZOJ3944: Sum(杜教筛模板)
BZOJ3944: Sum(杜教筛模板) 题面描述 传送门 题目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 数据范围线性不可做. ...
随机推荐
- HDU4370:0 or 1(最短路)
0 or 1 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 Description: Given a n*n matrix Cij (1< ...
- 修改select样式,vue select
<style> .selectbox{ width: 200px; display: inline-block; overflow-x: hidden; height: 28px; lin ...
- 跨域请求json数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 函数实现多个按钮控制一个div
<!DOCTYPE HTML><html><head> <meta http-equiv="txttent-Type" txttent=& ...
- 设计模式开篇综述(Java)
设计原则是规范,设计模式是技巧.如果在项目中能够灵活运用这些基础知识,那么我相信一定会得到意想不到的收获. 接下来的时间里,我将继续学习设计模式,将对每一个设计模式从以下几点进行分析和学习,如有不妥当 ...
- Nginx各项配置的含义
#user nobody; #配置用户或者组,默认为nobody nobody worker_processes 4; #允许生成的进程数,默认为1 worker_cpu_affinity 00000 ...
- Flume的安装,配置及使用
1,上传jar包 2,解压 3,改名 4,更改配置文件 将template文件重镜像 root@Ubuntu-1:/usr/local/apache-flume/conf# cat flume-env ...
- EL表达式中获取list长度(JSTL函数用法)
在jsp页面中不能通过${list.size}取列表长度,而是 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" pref ...
- Java任务调度框架----kunka
初衷 工作中用到了很多框架,但是给我印象最深的还是我们PO(Product Owner)在若干年前写的一套任务调度框架,在JDK1.4之前,concurrent包还没有引入, 手写的这套Token调度 ...
- KVM的ept机制
转载:http://ytliu.info/blog/2014/11/24/shi-shang-zui-xiang-xi-de-kvm-mmu-pagejie-gou-he-yong-fa-jie-xi ...