BZOJ.3944.Sum(Min_25筛)
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筛)的更多相关文章
- ●杜教筛入门(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 [杜教筛]
3944: Sum 贴模板 总结见学习笔记(现在还没写23333) #include <iostream> #include <cstdio> #include <cst ...
- bzoj 3944 Sum —— 杜教筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教筛入门题! 看博客:https://www.cnblogs.com/zjp-sha ...
- 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 3944 Sum
题目链接:Sum 嗯--不要在意--我发这篇博客只是为了保存一下杜教筛的板子的-- 你说你不会杜教筛?有一篇博客写的很好,看完应该就会了-- 这道题就是杜教筛板子题,也没什么好讲的-- 下面贴代码(不 ...
- 「bzoj 3944: Sum」
题目 杜教筛板子了 #include<iostream> #include<cstring> #include<cstdio> #include<cmath& ...
- 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) ...
- 【刷题】BZOJ 3944 Sum
Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1,ans ...
随机推荐
- Brup Suite 渗透测试笔记(五)
之前章节记到Burp Intruder功能区,接上次笔记 一.首先说再展开说说Brup Intruder功能, 1.标识符枚举Web应用程序经常使用标识符来引用用户账户,资产数据信息. 2.提取有用的 ...
- MySQL 5.7的多源复制
MySQL 5.7已经开始支持了多源复制,相信小伙们都很激动,MySQL 5.7之前只能实现一主一从.一主多从或者多主多从的复制,如果想实现多主一从的复制,只好使用MariaDB,但是MariaDB又 ...
- ajax---获取XMLHttpReuquest 对象
ajax的异步和同步(Asynchronus Javascript and Xml) 同步:一个时间段只能干一件事:即按部就班,一件事一件事的做. 异步:相同的时间段做多件事,同时进行.依靠 XMLH ...
- Windows文件系统
微软在Dos/Windows系列操作系统中共使用了6种不同的文件系统(包括即将在windows的下一个版本中使用的Winfs).它们分别是:FAt12.FAT16.FAT32.NTFS.NTFS5.0 ...
- spring cloud feign覆写默认配置级feign client的日志打印
一.覆写fegin的默认配置 1.新增配置类FeignConfiguration.java package com.config; import org.springframework.context ...
- 20165206 2017-2018-2 《Java程序设计》第8周学习总结
20165206 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 进程:进程是程序的一次动态执行过程,对应了从代码加载.执行至执行完毕的一个完整过程,这个过程 ...
- LOCK TABLES 和 UNLOCK TABLES
MySQLdump的时LOCK TABLES 和 UNLOCK TABLES 在mysqldump后的数据中会发现有 LOCK TABLES tables_name WRITE;和结尾处有 UNLOC ...
- Kubeadm安装的K8S集群1年证书过期问题的解决思路
这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...
- 一脸懵逼学习Hdfs---动态增加节点和副本数量管理(Hdfs动态扩容)
1:按照上篇博客写的,将各个进程都启动起来: 集群规划: 主机名 IP 安装的软件 运行的进程 master ...
- 一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现
1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toStrin ...