[ACM-ICPC 2018 徐州赛区网络预赛][D. Easy Math]
题目链接:Easy Math
题目大意:给定\(n(1\leqslant n\leqslant 10^{12}),m(1\leqslant m\leqslant 2*10^{9})\),求\(\sum_{i=1}^{m}\mu (i\cdot n)\)。
题解:废话少说,直接上公式
$$\mu(i\cdot n)=\left\{\begin{matrix}
\mu(i)\cdot\mu(n) & gcd(i,n)==1\\
0 & other
\end{matrix}\right.$$
设
$$F(n,m)=\sum_{i=1}^{m}\mu(i\cdot n)$$
则有$$F(n,m)=\mu(n)\cdot\sum_{i=1}^{m}\mu (i)\cdot[gcd(i,n)==1]$$
由$$[n==1]=\sum_{d|n}^{ } \mu(d)$$
$$F(n,m)=\mu(n)\cdot\sum_{i=1}^{m}\mu (i)\sum_{d|gcd(i,n)}^{ }\mu(d)$$
$$F(n,m)=\mu(n)\cdot\sum_{d|n}^{d\leqslant m}\mu(d)\cdot\sum_{i=1}^{\left \lfloor \frac{m}{d} \right \rfloor}\mu(i\cdot d)$$
$$F(n,m)=\mu(n)\cdot\sum_{d|n}^{d\leqslant m}\mu(d)\cdot F(d,\left \lfloor \frac{m}{d} \right \rfloor)$$
推出式子后,递归求解即可,当n==1时,有\(F(n,m)=M(m)=\sum_{i=1}^{m}\mu(i)\),关于这个式子有一个莫比乌斯反演的经典公式,就是$$M(n)=1-\sum_{i=2}^{n}M(\left \lfloor \frac{n}{i} \right \rfloor)$$预处理出莫比乌斯函数及其前缀和的值后即可,求M(n)的时候记得要分块做
#include<bits/stdc++.h>
using namespace std;
#define N 10000001
#define LL long long
LL n,m,cnt,p[N],f[N],s[N];
map<LL,LL>M;
bool x[N];
void pretype()
{
f[]=;
for(int i=;i<N;i++)
{
if(!x[i])p[++cnt]=i,f[i]=-;
for(int j=;j<=cnt && i*p[j]<N;j++)
{
f[i*p[j]]=-f[i];
x[i*p[j]]=true;
if(i%p[j]==){f[i*p[j]]=;break;}
}
}
for(int i=;i<N;i++)
s[i]=s[i-]+f[i];
}
LL get(LL n)
{
if(n<N)return f[n];
LL k=;
for(LL i=;i*i<=n;i++)
if(n%i==)
{
if(n%(i*i)==)return ;
k*=-,n/=i;
}
if(n>)k*=-;return k;
}
LL get_M(LL n)
{
if(n<N)return s[n];
if(M[n])return M[n];
LL res=,nxt;
for(LL i=;i<=n;i=nxt+)
{
nxt=min(n,n/(n/i));
res-=(nxt-i+)*get_M(n/i);
}
return M[n]=res;
}
LL F(LL n,LL m)
{
if(n==)return get_M(m);
LL miu=get(n),res=;
if(miu==)return ;
for(LL d=;d*d<=n && d<=m;d++)if(n%d==)
{
res+=get(d)*F(d,m/d);
if(n/d<=m)res+=get(n/d)*F(n/d,m/(n/d));
}
return miu*res;
}
int main()
{
pretype();
scanf("%lld%lld",&m,&n);
printf("%lld\n",F(n,m));
}
[ACM-ICPC 2018 徐州赛区网络预赛][D. Easy Math]的更多相关文章
- 徐州赛区网络预赛 D Easy Math
比赛快结束的适合看了一下D题,发现跟前几天刚刚做过的HDU 5728 PowMod几乎一模一样,当时特兴奋,结果一直到比赛结束都一直WA.回来仔细一琢磨才发现,PowMod这道题保证了n不含平方因子, ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)
ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)
ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...
- 计蒜客 1460.Ryuji doesn't want to study-树状数组 or 线段树 (ACM-ICPC 2018 徐州赛区网络预赛 H)
H.Ryuji doesn't want to study 27.34% 1000ms 262144K Ryuji is not a good student, and he doesn't wa ...
- ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)
传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...
- ACM-ICPC 2018 徐州赛区网络预赛 B. BE, GE or NE
In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named &qu ...
- ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study
262144K Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...
- ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track
262144K Morgana is learning computer vision, and he likes cats, too. One day he wants to find the ...
- ACM-ICPC 2018 徐州赛区网络预赛 I. Characters with Hash
Mur loves hash algorithm, and he sometimes encrypt another one's name, and call him with that encryp ...
随机推荐
- Deepin 15.4 安装 Double Commander
参照官方教程,安装命令行如下: https://software.opensuse.org/download.html?project=home%3AAlexx2000&package=dou ...
- C#保存文件为无BOM的utf8格式
如图所示,发现用C#的 File.WriteAllLines 方法,无论怎么设置,最终生成的文件都是 PC utf8,也就是CRLF,用SVN进行提交的时候,显示左侧为utf8,右侧为utf8 BOM ...
- Maven中classifier
1.classifier概述 classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact).它是可选的,它可以是任意的字符串,附加在版本号之后. 2.使用场景 场景一:区分 ...
- 开源GIS浅谈 【转】
http://blog.csdn.net/happyduoduo1/article/details/51773850 谈到GIS软件,首先让我们想到的是GIS界的龙头大哥ESRI公司旗下的ArcGIS ...
- spring mvc \ spring boot 允许跨域请求 配置类
用@Component 注释下,随便放个地方就可以了 package com.chinaws.wsarchivesserver.core.config; import org.springframew ...
- IntelliJ IDEA给Serializable类加上自动的serialVersionUID
如题 见下图 设置以后,点击类,按Alt + Enter 自动加入的代码如下图
- 唯一ID算法之:snowflake(Java版本)
Twitter开源的算法,简单易用. /** * Twitter_Snowflake<br> * SnowFlake的结构如下(每部分用-分开):<br> * 0 - 0000 ...
- Java并发编程:4种线程池和缓冲队列BlockingQueue
一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动 ...
- 使用protobuf编译onnx.proto过程中的一些问题总结
使用git clone下载protobuf的源代码,然后git checkout到branch2.7.0: 编译protobuf,先在代码顶层目录执行./configure,然后执行make,成功后执 ...
- Vue在线客服系统【开源项目】
1. 项目介绍 一个基于Vue2.0的在线客服系统. 技术栈包含:Vue.VueX.Vue Router.Element UI. 2. 功能介绍 项目包含了2个模块:客服端和访客端. 2.1 客服端功 ...