[bzoj3944] sum [杜教筛模板]
题面:
就是让你求$ \varphi\left(i\right) $以及$ \mu\left(i\right) $的前缀和
思路:
就是杜教筛的模板
我们把套路公式拿出来:
$ g\left(1\right)S\left(n\right)=\sum_{i=1}^{n}\left(g\ast f\right)\left(i\right)-\sum_{i=2}^{n}g\left(i\right)S\left(\frac ni\right) $
其中函数$f$分别为$\varphi$以及$\mu$
对于这两个函数有两个非常好用的卷积公式:
$\left(\mu\ast I\right)=\varepsilon$
$\left(\varphi\ast I\right)=id$
那么我们设g(x)=1,然后把g(x)带进去,两个前缀和就变成了这样的:
$S\left(n\right)=1-\sum_{i=2}^{n}S\left(\frac ni\right)$这个是$\mu$
$S\left(n\right)=\frac{n\ast\left(n+1\right)}{2}-\sum_{i=2}^{n}S\left(\frac ni\right)$这个是$\varphi$
然后递归,记忆化求和就可以了
注意最好写成一个递归处理两个答案......不然会T成狗
Code:
这里提供两个函数分开的版本,方便查看
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll phi[],pri[],tot=,mu[],n;bool vis[];
void init(){
ll i,j,k;phi[]=mu[]=;phi[]=;
for(i=;i<=;i++){
if(!vis[i]){
pri[++tot]=i;phi[i]=i-;mu[i]=-;
}
for(j=;j<=tot;j++){
k=i*pri[j];if(k>) break;
vis[k]=;
if(i%pri[j]==){
phi[k]=phi[i]*pri[j];
mu[k]=;
break;
}
phi[k]=phi[i]*phi[pri[j]];
mu[k]=-mu[i];
}
}
for(i=;i<=;i++) phi[i]=phi[i-]+phi[i],mu[i]=mu[i-]+mu[i];
}
ll sum1(ll x){return x*(x+)/;}
ll v1[],v2[],m1[],m2[];
ll S1(ll x){
if(x<=) return phi[x];
ll re=sum1(x);ll i,j,t=n/x;
if(v1[t]) return m1[t];
for(i=;i<=x;i=j+){
j=x/(x/i);
re-=(j-i+)*S1(x/i);
}
v1[t]=;
return m1[t]=re;
}
ll S2(ll x){
if(x<=) return mu[x];
ll re=,i,j,t=n/x;
if(v2[t]) return m2[t];
for(i=;i<=x;i=j+){
j=x/(x/i);
re-=(j-i+)*S2(x/i);
}
v2[t]=;
return m2[t]=re;
}
int main(){
ll T=read();init();
while(T--){
n=read();memset(v1,,sizeof(v1));memset(v2,,sizeof(v2));
printf("%lld %lld\n",S1(n),S2(n));
}
}
[bzoj3944] sum [杜教筛模板]的更多相关文章
- [BZOJ3944]Sum(杜教筛)
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6201 Solved: 1606[Submit][Status][Discuss ...
- 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)
题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...
- bzoj3944: Sum 杜教筛板子题
板子题(卡常) 也可能是用map太慢了 /************************************************************** Problem: 3944 Us ...
- BZOJ3944: Sum(杜教筛模板)
BZOJ3944: Sum(杜教筛模板) 题面描述 传送门 题目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 数据范围线性不可做. ...
- 3944: Sum[杜教筛]
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3471 Solved: 946[Submit][Status][Discuss] ...
- 洛谷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 ...
- LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻
P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...
随机推荐
- 浅谈 import / export
import { ngModule } from '@angular/core'; import { AppComponent } from './app.component'; export cla ...
- vue组件 $children,$refs,$parent的使用
如果项目很大,组件很多,怎么样才能准确的.快速的寻找到我们想要的组件了?? 1)$refs 首先你的给子组件做标记.demo :<firstchild ref="one"&g ...
- SOA体系-三大核心部件
1.ESB(Enterprise Service Bus)企业服务总线.ESB是传统中间件技术与XML.Web服务等技术结合的产物.ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素.从 ...
- ThreadLocal为什么要用WeakReference
先上一张图看一下ThreadLocal的内部结构,每个Thread对象内部都维护了一个ThreadLocal.ThreadLocalMap 我们在上图看到的就是三个Thread对象内部格子的Threa ...
- Oracle 数字处理函数
数字处理函数 ① mod(number1,number2) 取余数的函数,比如mod(10,3) = 10/3 = 1. ② round(number,num_ditigs) .trunk(numbe ...
- 理解Express 中间件
Express 中间件 Express程序基本上是一系列中间件函数的调用.中间件就是一个函数, 接受 req.res.next几个参数. 中间件函数可以执行任何代码, 对请求和响应对象进行修改, 结束 ...
- vue-cli npm run build 打包问题 webpack@3.6
1, vue-router 路由 有两个模式 (mode) hash (默认模式) 使用URL来模拟一个完整的URL 但是没个URL都会带上 "#/'' 支持所有浏览器 这个模式使用 red ...
- mysql切换数据库提示警告:Reading table information for completion of table and column names
登录数据库后,选择数据库时发现以下提示, mysql> use testReading table information for completion of table and column ...
- mysql -u root -p 解释
使用此命令首先确保你的mysql运行环境已经搭建好 这是客户端连接mysql服务器的指令,比较全的写法是下面两种 第一个是全拼,第二个是第一个的缩写 mysql --host=localhost -- ...
- jupyter notebook(一)——anaconda安装后jupyter不能自动跳转网页
1.问题描述 之前没有遇到过.这次重装系统,发现安装anaconda这个集成版python后,jupyter notebook打开后不能自动跳转打开的交互网页. 系统是windows7.anacond ...