传送门

Description

给定一个正整数\(N(N\le2^{31}-1)\)

\[ans1=\sum_{i=1}^n \varphi(i)
\]

\[ans_2=\sum_{i=1}^n \mu(i)
\]

Solution

总算是写了一个不会\(TLE\)的杜教筛,不想用\(map\),因此上了一个很丑的\(Hash\)……

Code

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 1900000
int cnt,pr[MN];
bool mark[MN];
struct Node{int id;ll phi,mu;}MI[MN];
inline void init()
{
register int i,j;
for(i=1;i<MN;++i) MI[i].id=i;
MI[1].phi=MI[1].mu=1;
for(i=2;i<MN;++i)
{
if(!mark[i]){pr[++cnt]=i;MI[i].phi=i-1;MI[i].mu=-1;}
for(j=1;j<=cnt&&i*pr[j]<MN;++j)
{
#define now i*pr[j]
mark[now]=true;
if(i%pr[j]==0){MI[now].mu=0;MI[now].phi=MI[i].phi*pr[j];break;}
else MI[now].mu=-MI[i].mu,MI[now].phi=MI[i].phi*(pr[j]-1);
#undef now
}
}
for(i=1;i<MN;++i) MI[i].phi+=MI[i-1].phi,MI[i].mu+=MI[i-1].mu;
}
class Hash
{
#define mod 23333
private:
std::vector<Node> a[mod];
int ha,i;
Node em;
public:
Hash(){em=(Node){0,0ll,0ll};};
inline void insert(int id,ll phi,ll mu){a[id%mod].push_back((Node){id,phi,mu});}
inline Node find(int id)
{
ha=id%mod;
for(i=a[ha].size()-1;~i;--i) if(a[ha][i].id==id) return a[ha][i];
return em;
}
}HA;
inline Node calc(int n)
{
if(n<MN) return MI[n];
register Node ans,tmp;
if((ans=HA.find(n)).id) return ans;
ll ret1=1ll,ret2=1ll*n*(n+1)/2ll;
for(register ll i=2,j;i<=n;i=j+1)
j=n/(n/i),tmp=calc(n/i),ret1-=(j-i+1)*tmp.mu,ret2-=(j-i+1)*tmp.phi;
ans=(Node){n,ret2,ret1};HA.insert(n,ret2,ret1);
return ans;
}
int main()
{
init();
register int T,n;
T=read();
register Node ans;
while(T--)
{
n=read();
ans=calc(n);
printf("%lld %lld\n",ans.phi,ans.mu);
}
return 0;
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

【模板】杜教筛(Sum)的更多相关文章

  1. p4213 【模板】杜教筛(Sum)

    传送门 分析 我们知道 $\varphi * 1 = id$ $\mu * 1 = e$ 杜教筛即可 代码 #include<iostream> #include<cstdio> ...

  2. [模板] 杜教筛 && bzoj3944-Sum

    杜教筛 浅谈一类积性函数的前缀和 - skywalkert's space - CSDN博客 杜教筛可以在\(O(n^{\frac 23})\)的时间复杂度内利用卷积求出一些积性函数的前缀和. 算法 ...

  3. luoguP4213 [模板]杜教筛

    https://www.luogu.org/problemnew/show/P4213 同 bzoj3944 考虑用杜教筛求出莫比乌斯函数前缀和,第二问随便过,第一问用莫比乌斯反演来做,中间的整除分块 ...

  4. LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻

    P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...

  5. 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]

    1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...

  6. BZOJ3944: Sum(杜教筛模板)

    BZOJ3944: Sum(杜教筛模板) 题面描述 传送门 题目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 数据范围线性不可做. ...

  7. Luogu 4213 【模板】杜教筛(Sum)

    当作杜教筛的笔记吧. 杜教筛 要求一个积性函数$f(i)$的前缀和,现在这个东西并不是很好算,那么我们考虑让它卷上另外一个积性函数$g(i)$,使$(f * g)$的前缀和变得方便计算,然后再反推出这 ...

  8. [bzoj3944] sum [杜教筛模板]

    题面: 传送门 就是让你求$ \varphi\left(i\right) $以及$ \mu\left(i\right) $的前缀和 思路: 就是杜教筛的模板 我们把套路公式拿出来: $ g\left( ...

  9. luoguP4213 【模板】杜教筛(Sum)杜教筛

    链接 luogu 思路 为了做hdu来学杜教筛. 杜教筛模板题. 卡常数,我加了register居然跑到不到800ms. 太深了. 代码 // luogu-judger-enable-o2 #incl ...

  10. [洛谷P4213]【模板】杜教筛(Sum)

    题目大意:给你$n$,求:$$\sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i)$$最多$10$组数据,$n\leqslant2^{31}- ...

随机推荐

  1. WebHost.CreateDefaultBuilder

    返回WebHostBuilder: 1.用Kestrel做为web服务器,并根据配置提供器内容对其配置. 2.当前目录作为content根目录. 3.从appsettings.json,环境变量,ar ...

  2. .net SHA-256 SHA-1

    Framework 4.5 uses SHA-256 algorithm for the signature, and 4.0 uses SHA-1.

  3. python类中的__str__以及__repr__

    一.__str__ 打印时触发 class A: def __str__(self): #打印时候执行的代码块 return 'ok' # 如果不返回字符串类型,则会报错 print(A()) #相当 ...

  4. nodejs之express的中间件

    express中间件分成三种 内置中间件 static 自定义中间件 第三方中间件 (body-parser) (拦截器) 全局自定义中间件 在请求接口时 有几个接口都要验证传来的内容是否存在或者是否 ...

  5. vscode教程(基础篇)

    转载:https://segmentfault.com/a/1190000017949680 本文主要介绍vscode在工作中常用的快捷键及插件,目标在于提高工作效率 本文的快捷键是基于mac的,wi ...

  6. iOS-CGContextRef

    图形上下文(Graphics Context)---绘制目标 需要在iOS应用程序的屏幕上进行绘制时,需要先定义一个UIView类,并实现它的drawRect:方法,当启动程序时,会先调用loadVi ...

  7. 类中变量私有化和调用:__x和getx/setx或者property

    __xx:双前置下划线,子类不可继承属性.方法,父类私有. 详见:https://www.cnblogs.com/andy9468/p/8299448.html 例子1:隐藏数据:私有化后,用get和 ...

  8. request-html模块 (上)

    requests-html模块 官方网站 Github网址 请求数据 from requests_html import HTMLSession session = HTMLSession() req ...

  9. linux使用文本编辑器vi常用命令

    一:翻页 ctrl+u向上翻半页 ctrl+d   向下翻半页 ctrl+f/page up向上翻一页 ctrl+b/page on   向下翻一页 H光标移到当前页的第一个字符 M光标移到当前页的中 ...

  10. LOJ-1308-Ant network(蚂蚁的网络)-求割点分隔开的子图个数及乘积

    网上的题解大都模糊,我可能写的也比较模糊吧,讲究看看. 大致题意: 原图没有一个割点时,特殊考虑,至少ans1=2个通风井,方案数n*(n-1)/2; 原图上有多个割点时,每个(由割点限制成几部分的) ...