bzoj 3944 杜教筛
题目中要求phi和miu的前缀和,利用杜教筛可以推出公式。我们令
为
那么有公式
类比欧拉函数,我们可以推出莫比乌斯函数的和公式为
(公式证明懒得写了,主要核心是利用Dirichlet卷积的性质 phi * 1 =id, mu * 1 =0(n>1) 然后利用神奇的杜教筛搞一搞 )
因为有一个n=1的特例,所以这里有一个1,我一开始错在这里,总和答案差1........
所以我们可以预处理一波phi和mu的前缀和 然后递归的处理,用map记忆一下就可以了,复杂度为n的三分之二次幂(我不会证明)——by VANE
#include<bits/stdc++.h>
using namespace std;
const int M=5e6;
bool not_prim[M+];
typedef long long ll;
int prim[M>>],prim_tot;
ll mu[M+],phi[M+];
map<int,ll> _phi,_mu;
void pre()
{
mu[]=;not_prim[]=;
phi[]=;
for(int i=;i<=M;++i)
{
if(!not_prim[i])
{
prim[++prim_tot]=i;
phi[i]=i-;
mu[i]=-;
}
for(int j=;j<=prim_tot&&prim[j]<=M/i;++j)
{
not_prim[prim[j]*i]=;
if(i%prim[j]==)
{
phi[prim[j]*i]=phi[i]*prim[j];
mu[prim[j]*i]=;
break;
}
phi[prim[j]*i]=phi[i]*phi[prim[j]];
mu[prim[j]*i]=-mu[i];
}
}
for(int i=;i<=M;++i)
{
phi[i]+=phi[i-];
mu[i]+=mu[i-];
}
}
ll calcphi(ll n)
{
if(n<=M) return phi[n];
map<int,ll>::iterator it;
if((it=_phi.find(n))!=_phi.end())
return _phi[n];
ll i,last;ll res=1ll*n*(n+)/;
for(i=;i<=n;i=last+)
{
last=n/(n/i);
res-=(last-i+)*calcphi(n/i);
}
return _phi[n]=res;
}
ll calcmu(ll n)
{
if(n<=M) return mu[n];
map<int,ll>::iterator it;
if((it=_mu.find(n))!=_mu.end()) return _mu[n];
ll i,last;ll res=;
for(i=;i<=n;i=last+)
{
last=n/(n/i);
res-=(last-i+)*calcmu(n/i);
}
return _mu[n]=res;
}
int main()
{
pre();
int t;
scanf("%d",&t);
while(t--)
{
ll n;
scanf("%lld",&n);
printf("%lld %lld\n",calcphi(n),calcmu(n));
}
}
bzoj 3944 杜教筛的更多相关文章
- bzoj 3944 Sum —— 杜教筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教筛入门题! 看博客:https://www.cnblogs.com/zjp-sha ...
- ●杜教筛入门(BZOJ 3944 Sum)
入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...
- bzoj 3944: Sum(杜教筛)
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4930 Solved: 1313[Submit][Status][Discuss ...
- bzoj 3944: Sum【莫比乌斯函数+欧拉函数+杜教筛】
一道杜教筛的板子题. 两个都是积性函数,所以做法是一样的.以mu为例,设\( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1} ...
- BZOJ 4805: 欧拉函数求和 杜教筛
https://www.lydsy.com/JudgeOnline/problem.php?id=4805 给出一个数字N,求sigma(phi(i)),1<=i<=N https://b ...
- 3944: Sum[杜教筛]
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3471 Solved: 946[Submit][Status][Discuss] ...
- bzoj 4916: 神犇和蒟蒻【欧拉函数+莫比乌斯函数+杜教筛】
居然扒到了学长出的题 和3944差不多(?),虽然一眼看上去很可怕但是仔细观察发现,对于mu来讲,答案永远是1(对于带平方的,mu值为0,1除外),然后根据欧拉筛的原理,\( \sum_{i=1}^{ ...
- [bzoj 4176] Lucas的数论 (杜教筛 + 莫比乌斯反演)
题面 设d(x)d(x)d(x)为xxx的约数个数,给定NNN,求 ∑i=1N∑j=1Nd(ij)\sum^{N}_{i=1}\sum^{N}_{j=1} d(ij)i=1∑Nj=1∑Nd(ij) ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
随机推荐
- JS操作CSS随机改变网页背景
今天有个朋友在weibo上问我可不可以用JS和CSS让页面每次刷新随机产生一张背景图,当然我的回答是可以的.具体可以这样做: 1.用JS定义一个图片数组,里面存放你想要随机展示的图片 1 2 3 4 ...
- WPF:ComboBox使用XmlDataProvider做级联
程序功能: 使用ComboBox做级联,数据源为XML文件,适合小数据量呈现 程序代码: <Window x:Class="WpfApplication1.LayouTest" ...
- 游戏AI:行为树
Behavior Tree 行为树通过子Task的返回值决定整棵树的走向 Task 行为树上的每个节点都称为一个Task, 每个Task存在三种状态, success, failure, runnin ...
- vue-loader 调用了cssLoaders方法配置了css加载器属性。
module: { loaders: [ // 这里也是相应的配置,test就是匹配文件,loader是加载器, { test: /\.vue$/, loader: 'vue' }, { test: ...
- 强连通图(最多加入几条边使得图仍为非强连通图)G - Strongly connected HDU - 4635
题目链接:https://cn.vjudge.net/contest/67418#problem/G 具体思路:首先用tarjan缩点,这个时候就会有很多个缩点,然后再选取一个含有点数最少,并且当前这 ...
- DNSLOG在渗透测试中的玩法儿
首先了解一下DNS是啥??? DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读 ...
- SVMtrain的参数c和g的优化
SVMtrain的参数c和g的优化 在svm训练过程中,需要对惩罚参数c和核函数的参数g进行优化,选取最好的参数 知道测试集标签的情况下 是让两个参数c和g在某一范围内取离散值,然后,取测试集分类准确 ...
- openjudge-NOI 2.6基本算法之动态规划 专题题解目录
1.1759 最长上升子序列 2.1768 最大子矩阵 3.1775 采药 4.1808 公共子序列 5.1944 吃糖果 6.1996 登山 7.2000 最长公共子上升序列 8.2718 移动路线 ...
- 「caffe编译bug」python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory
在Makefile.config找到PYTHON_INCLUDE,发现有点不同: PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib ...
- Python下urllib2应用
#coding=utf-8 import urllib,urllib2 url = 'http://www.xxx.com' values = {'wd' : 'python', 'language' ...