●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(ij)\quad N\leq 10^5\;M\leq 10^9$$
杜教筛
因为N比较小,所以从这里入手:
设$sum(n,M)=\sum_{i=1}^{M}\phi(ni)$
则答案为$ANS=\sum_{n=1}^{N}sum(n,M)$
考虑如何求$sum(n,M)$
首先按照唯一分解定理,$n={p_1}^{a_1}\times {p_2}^{a_2}\times\cdots\times {p_k}^{a_k}$
另$n'={p_1}^{1}\times {p_2}^{1}\times\cdots\times {p_k}^{1},P=\frac{n}{n'}$
由$\phi$的定义可得:$$\phi(n)=P\phi(\frac{n}{P})=P\phi(n')$$
所以$$sum(n,M)=P\times sum(n',M)$$
(现在n'没有平方质因子,即$|\mu(n')|=1$)
第一阶段已经结束,我们看看$sum(n',M)$又该怎么求?
任取一个n'的质因子,我们这里取最小的那个,用miniP表示:
显然$gcd(miniP,\frac{n'}{miniP})=1,即miniP和\frac{n'}{miniP}互质$
从$sum(n',M)=\sum_{i=1}^{M}\phi(n'i)$这个定义入手,接下来分两种情况:
(一)、miniP不是i的因子
那么有$$\phi(n'i)=\phi(miniP)\phi(\frac{n'}{miniP}i)=(miniP-1)\phi(\frac{n'}{miniP}i)$$
先假设$sum(n',M)=\sum_{i=1}^{M}\phi(n'i)$中枚举的i都与miniP互质,那么得到:
$$\begin{aligned}
sum(n',M)&=\sum_{i=1}^{M}\phi(n'i)\\
&=\sum_{i=1}^{M}(miniP-1)\phi({\frac{n'}{minip}i})\\
&=(miniP-1)sum(\frac{n'}{minip},M)\\
\end{aligned}$$
(二)、miniP是i的因子
那么有$$\phi(n'i)=miniP\phi(\frac{n'}{miniP}i)$$
显然对于上面的$sum(n',M)=(miniP-1)sum(\frac{n'}{minip},M)$而言,每当枚举到一个i与miniP不互质时,
就会少加一个$\phi(\frac{n'}{miniP}i)$
现在我们希望把这些漏掉的加回来,设漏加的总和为w,则:
$$\begin{aligned}
w&=\sum_{miniP|i}\phi(\frac{n'}{miniP}i)\\
&=\sum_{i=1}^{\lfloor \frac{M}{miniP} \rfloor}\phi(\frac{n'}{miniP}(i\times miniP))\\
&=\sum_{i=1}^{\lfloor \frac{M}{miniP} \rfloor}\phi(n'i)\\
&=sum(n',\lfloor \frac{M}{miniP} \rfloor)
\end{aligned}$$
所以,综上两种情况,我们得到:
$$sum(n',M)=(miniP-1)sum(\frac{n'}{minip},M)+sum(n',\lfloor \frac{M}{miniP} \rfloor)$$
差不多就这样了,我们枚举每个n,
分别求出:
$sum(n,M)=P\times sum(n',M)=P\times((miniP-1)sum(\frac{n'}{minip},M)+sum(n',\lfloor \frac{M}{miniP} \rfloor))$
对于每个sum(),进行递归求解,
到了递归的最底层时,
若n==1,那么$sum(1,M)=\sum_{i=1}^{M}\phi(i)$,用杜教筛求解。
若m==1,那么$sum(n,1)=phi(n),直接返回即可$
另外要先预处理出前$M^{\frac{2}{3}}个phi()$的前缀和,便于降低杜教筛的复杂度。
代码:
#include<bits/stdc++.h>
#define MAXN 100050
#define DJM 1000000
#define mod 1000000007
using namespace std;
struct Hash_Table{
#define Hmod 1425367
int org[DJM],val[DJM],nxt[DJM],head[Hmod],hnt;
Hash_Table(){hnt=2;}
void Push(int x,int v){
static int u; u=x%Hmod;
org[hnt]=x; val[hnt]=v; nxt[hnt]=head[u]; head[u]=hnt++;
}
int Find(int x){
static int u; u=x%Hmod;
for(int i=head[u];i;i=nxt[i])
if(org[i]==x) return val[i];
return -1;
}
}H;
int P[DJM+50],miniP[DJM+50],phi[DJM+50],sphi[DJM+50];
int sum[MAXN];
int N,M;
void Sieve(){
static bool np[DJM+50];
static int prime[DJM+50],pnt;
phi[1]=1; P[1]=1; miniP[1]=1;
for(int i=2;i<=DJM;i++){
if(!np[i]) prime[++pnt]=i,phi[i]=i-1,P[i]=1,miniP[i]=i;
for(int j=1;j<=pnt&&i<=DJM/prime[j];j++){
np[i*prime[j]]=1; miniP[i*prime[j]]=prime[j];
if(i%prime[j]){
phi[i*prime[j]]=phi[i]*phi[prime[j]];
P[i*prime[j]]=P[i];
}else{
phi[i*prime[j]]=phi[i]*prime[j];
P[i*prime[j]]=P[i]*prime[j];
break;
}
}
}
//for(int i=1;i<=DJM;i++) printf(":P=%d miniP=%d phi=%d\n",P[i],miniP[i],phi[i]);
for(int i=1;i<=DJM;i++) sphi[i]=(1ll*phi[i]+sphi[i-1])%mod;
}
int DJ_Sieve(int m){
if(m<=DJM) return sphi[m];
if(H.Find(m)!=-1) return H.Find(m);
int now=(1ll*m*(1+m)/2)%mod;
for(int i=2,last;i<=m;i=last+1){
last=m/(m/i);
now=(1ll*now-1ll*(last-i+1)*DJ_Sieve(m/i)%mod+mod)%mod;
}
H.Push(m,now);
return now;
}
int S(int n,int m){
if(m==0) return 0;
if(m==1) return phi[n];
if(n==1) return DJ_Sieve(m);
if(m==M&&sum[n]) return sum[n];
int now=(1ll*(miniP[n]-1)*S(n/miniP[n],m)+S(n,m/miniP[n]))%mod;
if(m==M) sum[n]=now;
if(now<0) printf("S %d %d\n",n,m);
return now;
}
int main(){
Sieve();
scanf("%d%d",&N,&M);
int ans=0;
for(int n=1;n<=N;n++)
ans=(1ll*ans+1ll*P[n]*S(n/P[n],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
Description 给定n,m,求 模10^9+7的值. Input 仅一行,两个整数n,m. Output 仅一行答案. Sample Input 100000 1000000000 Sampl ...
- 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} ...
- 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 ...
随机推荐
- bug终结者 团队作业第一周
bug终结者 团队作业第一周 小组组员及人员分工 小组成员 组长: 20162323 周楠 组员: 20162302 杨京典 20162322 朱娅霖 20162327 王旌含 20162328 蔡文 ...
- Swift -欢迎界面1页, 延长启动图片的显示时间(LaunchImage)
转自:http://www.hangge.com/blog/cache/detail_1238.html http://www.hangge.com/blog/cache/detail_672.htm ...
- Codeforces 837E. Vasya's Function
http://codeforces.com/problemset/problem/837/E 题意: f(a, 0) = 0; f(a, b) = 1 + f(a, b - gcd(a, b)) ...
- Java 多线程 从无到有
个人总结:望对屏幕对面的您有所帮助 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是程序(任务)的执行过程,它持有资源(共享内存, ...
- 16-TypeScript装饰器模式
在客户端脚本中,有一个类通常有一个方法需要执行一些操作,当我们需要扩展新功能,增加一些操作代码时,通常需要修改类中方法的代码,这种方式违背了开闭的原则. 装饰器模式可以动态的给类增加一些额外的职责.基 ...
- float、absolute、inline-block三者区别
0.前言 float属性在css2中是一个热门的属性,被广泛应用于布局之中,同时由于不当使用float带来的问题也非常多,本文结合自己对float的理解以及实际项目中碰到float的相关问题,做一个详 ...
- thinkphp中定义自己的函数
可以在前台和后台的公共文件夹中common.php中定义自己的函数,这样就可以在控制器中调用,而不需要调用对象了 /** * @name addvtorandp * @author 黄峰1664253 ...
- 在thinkphp框架中使用后台传值过来的数组,在hightcart中使用数组
js的数组是和php里面数组是不一样的,所以模板文件需要先接受,然后利用Js代码转化之后再使用,接受后台的数组有几种办法 1.后台传过来的json数组,利用Js是可以接受的,然后将json数据利用js ...
- Linux入门(1)_VMware和系统分区和系统安装和远程登陆管理
1 VMware的安装和使用 注意有 快照 和 克隆 的功能. 快照相当于建立一个 系统还原点, 可以随时恢复到原来状态. 克隆功能可以复制一个和当前一样的系统,并可以选择链接安装,只使用很少的空间就 ...
- 用javascript做别踩白块游戏2
这一次做一个好一点的,要求黑块自动下落,且速度逐渐加快 <!DOCTYPE html> <html> <head> <!-- 禁用缩放功能 --> &l ...