BZOJ

洛谷


不得不再次吐槽洛谷数据好水(连\(n=0,2^{31}-1\)都没有)。

\(Description\)

给定\(n\),分别求$$\sum_{i=1}n\varphi(i),\quad\sum_{i=1}n\mu(i)$$

\(n\lt2^{31}\)。

\(Solution\)

\(\varphi(p)=p-1,\quad\mu(p)=-1\)

令\(g(i)\)表示\(1\sim i\)的质数和,\(h(i)\)表示\(1\sim i\)的质数个数,那么\(\varphi(i)\)的前缀和就用\(g(i)-h(i)\)求,\(\mu(i)\)的前缀和就用\(-h(i)\)求。

\(\varphi(p^k)=p^{k-1}(p-1)\)

发现自己都忘掉这个了。。

Min_25比杜教筛不知道快了多少。

注意\(x\)是int,但\(x+1\)可能爆int。。(我这个题第二次因为这个错了吧(╯‵□′)╯︵┻━┻)

//3128kb	4632ms
#include <cmath>
#include <cstdio>
#include <algorithm>
typedef long long LL;
const int N=47000<<1; int n,m,Sqr,cnt,P[N>>2],h[N],w[N];
LL sp[N],g[N]; inline int ID(int x)
{
return x<=Sqr?x:m-n/x+1;
}
LL S_Phi(int x,int y)
{
if(x<=1||P[y]>x) return 0;
LL res=g[ID(x)]-sp[y-1]+y-1;
for(int i=y; i<=cnt&&P[i]*P[i]<=x; ++i)//p*p当然<=n
for(LL p=P[i],p1=p,t=p-1; 1ll*p1*p<=x/*这里会爆int!*/; p1*=p,t*=p)
res+=1ll*(S_Phi(x/p1,i+1)+p)*t;//x/p1不是n/p1!
return res;
}
int S_Mu(int x,int y)
{
if(x<=1||P[y]>x) return 0;
int res=h[ID(x)]+y-1;//-h!
for(int i=y; i<=cnt&&P[i]*P[i]<=x; ++i)
res-=S_Mu(x/P[i],i+1);
return res;
}
void Solve()
{
scanf("%d",&n), Sqr=sqrt(n);
if(!n) return (void)puts("0 0");
cnt=m=0;
for(LL i=1; i<=n; i=w[m]+1ll)
w[++m]=n/(n/i), g[m]=(1ll*w[m]*((LL)w[m]+1)>>1)-1, h[m]=w[m]-1;//(LL)w[m]+1!!!
for(int j=2; j<=Sqr; ++j)
if(g[j]!=g[j-1])
{
P[++cnt]=j, sp[cnt]=sp[cnt-1]+j; int lim=j*j;
for(int i=m; lim<=w[i]; --i)
{
int k=ID(w[i]/j);
g[i]-=1ll*j*(g[k]-sp[cnt-1]);//不取模。。
h[i]-=h[k]-cnt+1;
}
}
for(int i=1; i<=m; ++i) g[i]-=h[i], h[i]=-h[i];
printf("%lld %d\n",S_Phi(n,1)+1,S_Mu(n,1)+1);//f(1)!
} int main()
{
int T;
for(scanf("%d",&T); T--; Solve());
return 0;
}

BZOJ.3944.Sum(Min_25筛)的更多相关文章

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

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

  2. bzoj 3944: Sum(杜教筛)

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

  3. BZOJ 3944: Sum [杜教筛]

    3944: Sum 贴模板 总结见学习笔记(现在还没写23333) #include <iostream> #include <cstdio> #include <cst ...

  4. bzoj 3944 Sum —— 杜教筛

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

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

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

  6. BZOJ 3944 Sum

    题目链接:Sum 嗯--不要在意--我发这篇博客只是为了保存一下杜教筛的板子的-- 你说你不会杜教筛?有一篇博客写的很好,看完应该就会了-- 这道题就是杜教筛板子题,也没什么好讲的-- 下面贴代码(不 ...

  7. 「bzoj 3944: Sum」

    题目 杜教筛板子了 #include<iostream> #include<cstring> #include<cstdio> #include<cmath& ...

  8. BZOJ 3944 Sum 解题报告

    我们考虑令: \[F_n = \sum_{d|n}\varphi(d)\] 那么,有: \[\sum_{i=1}^{n}F_i = \sum_{i=1}^{n}\sum_{d|i}\varphi(d) ...

  9. 【刷题】BZOJ 3944 Sum

    Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1,ans ...

随机推荐

  1. spfa+01 规划

    尼玛的哪里错了.. /* 在有向图上找一个环,使结点权值和/边权和的比例值最大 01规划,设比例为l,那么将每条边的权值改成a[u]-l*w,如果有正权环,则比例l可行 如何判图中存在正权环?将 权值 ...

  2. Allegro PCB Design GXL (legacy) 从dxf文件中导入板框

    Allegro PCB Design GXL (legacy) version 16.6-2015 新建brd文件,并设置好相应的参数之后,点击菜单:File > Import > DXF ...

  3. Eciplce ALT+/失效的解决方法

    最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...

  4. vs2017初学c++环境配置及使用教程

    https://blog.csdn.net/jmpan_sjtu/article/details/79053169 https://blog.csdn.net/luoyu510183/article/ ...

  5. Oracle数据重复,只取一条

    --方法一 select * from tb_supply where rowid=any(select max(rowid) from tb_supply group by phone_id) -- ...

  6. 调整Windows操作系统下时间同步的频率

    今天发现时间不对,同步时间后看到Windows系统默认是一周才同步一次时间,频率太低了.查找了一下资料,找到了两种调整Win7时间同步频率的方法. 方法一:注册表法 这种方法是通过修改注册表中的键值来 ...

  7. Go语言之匿名函数

    匿名函数和字面量函数一样, 凡是可以使用字面量函数的地方,都可以用匿名函数代替. 这个和js中的匿名函数差不多吧. package main import "fmt" var su ...

  8. Elasticsearch 备忘

    Elasticsearch7.0版本在查询时需要增加 “track_total_hits”:true 来强制进行准确的计数,默认为 “track_total_hits”:10000, 而且返回的hit ...

  9. Azure 国内版 如何用powershell修改linux系统的密码

    国内版不像国际版本那样,一个UI按钮就解决问题,国内版很多功能上线比较慢,我们只能用powershell工具进行命令行 式的更改,也当温习一下命令了,好久不用了. $vm = Get-AzureVM ...

  10. 【C#】使用OWIN创建Web API

    OWIN的介绍 OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准 ...