[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= ...
随机推荐
- python_68_迭代器
''' 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...
- CUDA实现数组倒序
数组倒序,将在主机上初始化的数组传输到设备上,然后用CUDA并行倒序,此时在全局内存上操作,再将结果返回到主机并验证. #include <stdio.h> #include <as ...
- CentOS创建不需要输入密码的sudo用户
linux 怎么让普通用户使用sudo权限不需要输入密码. 在网上看到很多资料,都只说到了在/etc/sudoers添加下列行即可: username ALL=(ALL) ...
- idea 创建springboot工程
公司最近用springboot做微服务开发 1,使用idea创建一个spring initializr 工程 2,点击next 3,配置好后继续next 4,可以勾选上web,继续next 5,fin ...
- java算法面试题:排序都有哪几种方法?请列举。用JAVA实现一个快速排序。选择冒泡快速集合至少4种方法排序
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- ZR#317.【18 提高 2】A(计算几何 二分)
题意 Sol 非常好的一道题,幸亏这场比赛我没打,不然我估计要死在这个题上qwq 到不是说有多难,关键是细节太多了,我和wcz口胡了一下我的思路,然后他写了一晚上没调出来qwq 解法挺套路的,先提出一 ...
- MySQL - FIND_IN_SET 函数使用方法
SELECT * FROM xxxTableName x WHERE FIND_IN_SET(x.id, '1,2,3,4,5,6,7,8'); 如上查询,意为:xxxTableName 表中 x ...
- 开启PHP-LDAP
LDAP简介: LDAP(Lightweight Directory Access Protocol)的意思是"轻量级目录访问协议",是一个用于访问"目录服务器" ...
- php微信红包算法
微信红包算法.php /**生成红包的函数*/ function getRandMoney($totalMoney, $totalPeople=2, $miniMoney=1){ $randRemai ...
- cmf5分页相关
//分页配置在app/config.php 'paginate' => [ 'type' => '\cmf\paginator\Bootstrap', 'var_page' => ' ...