题目中要求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 杜教筛的更多相关文章

  1. bzoj 3944 Sum —— 杜教筛

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教筛入门题! 看博客:https://www.cnblogs.com/zjp-sha ...

  2. ●杜教筛入门(BZOJ 3944 Sum)

    入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...

  3. bzoj 3944: Sum(杜教筛)

    3944: Sum Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4930  Solved: 1313[Submit][Status][Discuss ...

  4. bzoj 3944: Sum【莫比乌斯函数+欧拉函数+杜教筛】

    一道杜教筛的板子题. 两个都是积性函数,所以做法是一样的.以mu为例,设\( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1} ...

  5. BZOJ 4805: 欧拉函数求和 杜教筛

    https://www.lydsy.com/JudgeOnline/problem.php?id=4805 给出一个数字N,求sigma(phi(i)),1<=i<=N https://b ...

  6. 3944: Sum[杜教筛]

    3944: Sum Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3471  Solved: 946[Submit][Status][Discuss] ...

  7. bzoj 4916: 神犇和蒟蒻【欧拉函数+莫比乌斯函数+杜教筛】

    居然扒到了学长出的题 和3944差不多(?),虽然一眼看上去很可怕但是仔细观察发现,对于mu来讲,答案永远是1(对于带平方的,mu值为0,1除外),然后根据欧拉筛的原理,\( \sum_{i=1}^{ ...

  8. [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∑N​j=1∑N​d(ij) ...

  9. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

随机推荐

  1. iOS网络基础---iOS-Apple苹果官方文档翻译

    CHENYILONG Blog iOS网络基础---iOS-Apple苹果官方文档翻译 iOS网络基础 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...

  2. iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2014年2月19日更新版)

    //转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496069.html     编号 iOS-Apple苹果官方文档翻译名称 博文链接地址 ...

  3. 数组C - 玛雅日历

    During his last sabbatical, professor M. A. Ya made a surprising discovery about the old Maya calend ...

  4. 使用webpack配置react并添加到flask应用

    学习react,配置是很痛苦的一关,虽然现在有了create-react-app这样方便的工具,但是必须要自己配置一遍,才能更好地进行项目开发. 首先要明确一个概念:react的文件必须经过编译才能被 ...

  5. flask插件系列之Flask-WTF表单

    flask_wtf是flask框架的表单验证模块,可以很方便生成表单,也可以当做json数据交互的验证工具,支持热插拔. 安装 pip install Flask-WTF Flask-WTF其实是对w ...

  6. flask插件系列之flask_celery异步任务神器

    现在继续学习在集成的框架中如何使用celery. 在Flask中使用celery 在Flask中集成celery需要做到两点: 创建celery的实例对象的名字必须是flask应用程序app的名字,否 ...

  7. 516.Longest Palindromic subsequence---dp

    题目链接:https://leetcode.com/problems/longest-palindromic-subsequence/description/ 题目大意:找出最长回文子序列(不连续), ...

  8. KVC, KVO 实现原理

    Key-Value Coding: 键值编码 (KVC) 方法调用: // 对象属性 // 类似: Person -> name setValue: forKey: // 对象的属性或者 属性的 ...

  9. oracle造成系统CPU过高的检查sql

    1. 根据占用CPU高的进程号来查询这个进程执行的SQL语句: CPU过高的进程号: #首先找到CPU过高的进程号 # top -bn1 是静态找到占用最高的进程 [root@localhost ~] ...

  10. angular项目中使用Primeng

    1.第一步把依赖添加到项目中 npm install primeng --save npm install @angular/animations --save npm install font-aw ...