bzoj 3512: DZY Loves Math IV
Description
给定n,m,求

模10^9+7的值。
Solution
设 \(S(n,m)\) 表示 \(\sum_{i=1}^{m}\phi(n*i)\)
\(Ans=\sum_{i=1}^{n}S(i,m)\)
\(S(n,m)=\sum_{i=1}^{m}\phi(n*i)\)
如果 \(\mu(n)!=0\)
则有 \(\sum_{i=1}^{m}\phi(\frac{n}{gcd(i,n)})*\phi(i)*gcd(i,n)\) (因为要保证除完\(gcd\)之后,两数不含相同的质因子,所以 \(\mu(n)!=0\))
\(\sum_{i=1}^{m}\phi(\frac{n}{gcd(i,n)})*\phi(i)*\sum_{d|i,d|n}\phi(d)\)
因为第一项和第三项是互质的 , 所以可以合并.
\(\sum_{i=1}^{m}\phi(i)*\sum_{d|n,d|i}\phi(\frac{n}{d})\)
\(\sum_{d=1}^{n}\phi(\frac{n}{d})*\sum_{i=1}^{\frac{m}{d}}\phi(d*i)\)
\(\sum_{d=1}^{n}\phi(\frac{n}{d})*S(d,\lfloor\frac{m}{d}\rfloor)\)
递归处理即可
如果 \(\mu(n)=0\)
我们直接提出 \(n\) 的多出的质因子之积 \(a\),使得 \(\mu(\frac{n}{a})!=0\)
那么 \(S(n,m)=\sum_{i=1}^{m}\phi(n*i)\) 中也可以提出 \(a\) 了,因为相同的质因子只会被算一次
根据定义式 \(\phi(n)=n*\Pi p_i\),所以 \(a\) 唯一的贡献就是使前面的 \(n\) 乘了个 \(a\)
\(a*S(n,m)=\sum_{i=1}^{m}\phi(\frac{n}{a}*i)=a*S(\frac{n}{a},m)\)
递归处理即可
边界条件 \(m=1\) 时,结果为 \(\phi(n)\), \(n=1\) 时,跑一个杜教筛就行了
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,mod=1e9+7;
int n,prime[N],num=0,m,phi[N],mu[N],pre[N],la[N],s[N];bool vis[N];
void priwork(){
phi[1]=s[1]=1;
for(int to,i=2;i<N;i++){
if(!vis[i])prime[++num]=i,phi[i]=i-1,mu[i]=-1,pre[i]=i;
for(int j=1;j<=num && i*prime[j]<N;j++){
vis[to=i*prime[j]]=1;pre[to]=prime[j];
if(i%prime[j])phi[to]=phi[i]*(prime[j]-1),mu[to]=-mu[i];
else {phi[to]=phi[i]*prime[j];break;}
}
s[i]=(s[i-1]+phi[i])%mod;
}
for(int i=2;i<=n;i++){
if(mu[i])continue;
int last=0,x=i;la[i]=1;
while(x>1){
if(pre[x]==last)la[i]*=pre[x];
last=pre[x];x/=pre[x];
}
}
}
map<int,int>S[N],T;
inline int calc(int n){
if(n<N)return s[n];
if(T.find(n)!=T.end())return T[n];
int ret=(1ll*n*(n+1)>>1)%mod;
for(int i=2,r;i<=n;i=r+1){
r=n/(n/i);
ret=(ret-1ll*calc(n/i)*(r-i+1))%mod;
}
if(ret<0)ret+=mod;
return T[n]=ret;
}
inline int solve(int n,int m){
if(m==1)return phi[n];
if(n==1)return calc(m);
if(S[n].find(m)!=S[n].end())return S[n][m];
if(!mu[n])return 1ll*la[n]*solve(n/la[n],m)%mod;
int ret=0,lim=min(m,(int)sqrt(n));
for(int i=1;i<=lim;i++){
if(n%i==0){
if(i*i!=n)ret=(ret+1ll*phi[n/i]*solve(i,m/i)+1ll*phi[i]*solve(n/i,m/(n/i)))%mod;
else ret=(ret+1ll*phi[n/i]*solve(i,m/i))%mod;
}
}
return S[n][m]=ret;
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
cin>>n>>m;
priwork();
int ans=0;
for(int i=1;i<=n;i++)ans=(ans+solve(i,m))%mod;
printf("%d\n",ans);
return 0;
}
bzoj 3512: DZY Loves Math IV的更多相关文章
- BZOJ 3512: DZY Loves Math IV [杜教筛]
3512: DZY Loves Math IV 题意:求\(\sum_{i=1}^n \sum_{j=1}^m \varphi(ij)\),\(n \le 10^5, m \le 10^9\) n较小 ...
- ●BZOJ 3512 DZY Loves Math IV
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3512 题解: $$求ANS=\sum_{i=1}^{N}\sum_{j=1}^{M}\phi ...
- 【刷题】BZOJ 3512 DZY Loves Math IV
Description 给定n,m,求 模10^9+7的值. Input 仅一行,两个整数n,m. Output 仅一行答案. Sample Input 100000 1000000000 Sampl ...
- bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】
参考:http://blog.csdn.net/wzf_2000/article/details/54630931 有这样一个显然的结论:当\( |\mu(n)|==1 \)时,\( \phi(nk) ...
- 【BZOJ3512】DZY Loves Math IV(杜教筛)
[BZOJ3512]DZY Loves Math IV(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\l ...
- ●BZOJ 3309 DZY Loves Math
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3309 题解: 莫比乌斯反演,线筛 化一化式子: f(x)表示x的质因子分解中的最大幂指数 $ ...
- BZOJ 3561 DZY Loves Math VI
BZOJ 3561 DZY Loves Math VI 求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\text{lcm}(i,j)^{\gcd(i,j)}\),钦定\(n\leq m ...
- BZOJ 3309: DZY Loves Math
3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 761 Solved: 401[Submit][Status ...
- bzoj 3309 DZY Loves Math 莫比乌斯反演
DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1303 Solved: 819[Submit][Status][Dis ...
随机推荐
- win7 64 VC++ ado方式连接access 连接字符串
运行环境:win7 64 vc++6.0 office 2007 32位(access 2007) 我用的是ado方式连接access数据库,(现在的Win7系统中安装的一般 ...
- cobbler PXE 安装系统时出现的问题
cobbler PXE 安装系统时出现的问题 1.安装包未找到.解决方法:ios镜像里没有软件包,换掉该软件包的ios镜像,或者在ks.cfg 文件里删去或注释掉%packages 里指定安装的软件包 ...
- 【Linux】CentOS7上解压zip需要安装uzip
1.安装zip.unzip应用 yum install zip unzip 2.压缩和解压文件 以下命令均在/home目录下操作 cd /home #进入/home目录 a.把/home目录下面的my ...
- git 使用技巧之采用别名,简化命令
git config --global alias.st status git config --global alias.ci commit git config --global alias.co ...
- HTML-★★★★★JavaScritp简介与语法★★★★★
简介: 1.什么是JavaScript? 它是个脚本语言,作用是使 HTML 页面具有更强的动态和交互性,它需要有宿主文件,它的宿主文件就是html文件. JavaScript 是 Web 的编程语 ...
- tableView header Refresh 下拉刷新/上拉加载
一. UIScrollView 的分类 //作为入口 #import <UIKit/UIKit.h> #import "RefreshHeader.h" #import ...
- Pycharm与github的秘密
GIT介绍 GIT文章请看老男孩教育-银角大王的博客: http://www.cnblogs.com/wupeiqi/articles/7295372.html Git 是一个开源的分布式版本控制软件 ...
- 3. Javascript学习笔记——变量、内存、作用域
3. 变量.内存.作用域 3.1 基本类型和引用类型的值 ECMAScript 变量可能包含两种不同数据类型的值:基本类型值[Undefined.Null.Boolean.Number 和 Strin ...
- [转] linux nc命令
[From] https://blog.csdn.net/freeking101/article/details/53289198 NC 全名 Netcat (网络刀),作者是 Hobbit & ...
- confiparser模块
什么是confiparser confiparser,翻译为配置解析,很显然,他是用来解析配置文件的, 何为配置文件? 用于编写程序的配置信息的文件 何为配置信息? 为了提高程序的扩展性,我们会把一些 ...