对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
给定正整数a,b,求:

$$\sum_{i=1}^{i<=a}\sum_{j=1}^{j<=b}f(gcd(i,j))$$

bzojP3309

http://www.lydsy.com/JudgeOnline/problem.php?id=3309



化式子:

$$\sum_{i=1}^{i<=a}\sum_{j=1}^{j<=b}f(gcd(i,j))$$

$$\sum_{x=1}^{min(a,b)}f(x)·\sum_{x|d}\mu({d \over x})({a \over d})({b \over d})$$

$$\sum_{x=1}^{min(a,b)}f(x)·\sum_{d=1}^{min(a,b) \over x}\mu(d)({a \over dx})({b \over dx})$$

$$\sum_{dx=1}^{min(a,b)}({a \over dx})({b \over dx})\sum_{d=1}^{d<=dx}f(x)*\mu(d)$$

$$\sum_{x=1}^{min(a,b)}({a \over x})({b \over x})(f*\mu)(x)$$

这个化式子的过程旨在尽可能地把无关a,b的,可预处理的部分提出来;

现在只要预处理出f与$\mu$的卷积即可通过枚举除法做到单次$O(\sqrt{n})的效率$

f和$\mu$可以通过线性筛求出,

如何在较好的时间内求出他们的卷积呢;

不会,

不过打表可以发现:

$$当\mu(i)=1时,(f*\mu)(i)=-1$$

$$当\mu(i)=-1时,(f*\mu)(i)=1$$

$$当\mu(i)=0时,若i的所有质因子齐次,次数为k,则(f*\mu)(i)=(f*\mu)(^{k}\sqrt{i}),否则(f*\mu)(i)=0$$

这样处理好$f*\mu$,然后枚举除法即可;

由于笔者太弱,于是直接上了单次处理$O(log_2log_2n)$的线性筛

2018.01.25 upd:我原来以为暴力计算卷积函数是$O(n\sqrt{n})$的,后来才发现,这其实是$O(n*ln(n))$的,所以暴力计算f*mu应该也能过

2018.01.25 upd:一开始不觉得数列求和分析复杂度可以积分(好像在项数少的时候不太拟合),现在看来好像可以(项数多的时候比较好)

2018.07.12 upd:这里顺便记录一下枚举除法套枚举除法是$O(N^{3\over 4})$的,积分证得

代码:

 #include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int MAXN=1e7;
LL f_mu[MAXN+];
int pri[MAXN],f[MAXN+],mu[MAXN+],p[MAXN+],cnt;
bool vis[MAXN];
LL sum[MAXN+];
void prime();
LL Sqr(LL ,int );
LL work(int ,int );
int main()
{
int i,j,k,n,a,b;
prime();
sum[]=f_mu[]=sum[]=;
for(i=;i<=MAXN;i++){
if(mu[i]==)
f_mu[i]=-;
if(mu[i]==-)
f_mu[i]=;
if(mu[i]==){
if(i==Sqr(p[i],f[i]))
f_mu[i]=f_mu[p[i]];
else
f_mu[i]=;
}
sum[i]=sum[i-]+f_mu[i];
}
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d%d",&a,&b);
printf("%lld\n",work(a,b));
}
return ;
}
void prime(){
int i,j;
vis[]=true,mu[]=;
for(i=;i<=MAXN;i++){
if(!vis[i]){
f[i]=,p[i]=i,mu[i]=-;
pri[++cnt]=i;
}
for(j=;j<=cnt&&pri[j]*i<=MAXN;j++){
vis[i*pri[j]]=true;
if(i%pri[j]){
mu[i*pri[j]]=-mu[i];
f[i*pri[j]]=f[i],p[i*pri[j]]=p[i]*pri[j];
}
else{
mu[i*pri[j]]=;
f[i*pri[j]]=f[i]+(i%Sqr(pri[j],f[i])==);
p[i*pri[j]]=p[i];
break;
}
}
}
}
LL Sqr(LL x,int n){
LL ret=;
while(n){
if(n&)
ret*=x;
n>>=,x*=x;
}
return ret;
}
LL work(int a,int b){
int MIN=min(a,b),i,las;
LL ret=;
for(las=,i=;i<=MIN;las=i,i=min(a/(a/(las+)),b/(b/(las+)))){
ret+=(sum[i]-sum[las])*(1ll*a/i)*(1ll*b/i);
if(i==MIN)break;
}
return ret;
}

bzoj P3309 DZY Loves Math——solution的更多相关文章

  1. ●BZOJ 3309 DZY Loves Math

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3309 题解: 莫比乌斯反演,线筛 化一化式子: f(x)表示x的质因子分解中的最大幂指数 $ ...

  2. 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 ...

  3. BZOJ 3309: DZY Loves Math

    3309: DZY Loves Math Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 761  Solved: 401[Submit][Status ...

  4. 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较小 ...

  5. bzoj 3309 DZY Loves Math 莫比乌斯反演

    DZY Loves Math Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1303  Solved: 819[Submit][Status][Dis ...

  6. bzoj 3462: DZY Loves Math II

    3462: DZY Loves Math II Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 211  Solved: 103[Submit][Sta ...

  7. bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法

    给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sampl ...

  8. 【刷题】BZOJ 3512 DZY Loves Math IV

    Description 给定n,m,求 模10^9+7的值. Input 仅一行,两个整数n,m. Output 仅一行答案. Sample Input 100000 1000000000 Sampl ...

  9. 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} ...

随机推荐

  1. (3)Oracle基础--表

    · 认识表 Oracle中的表都是存储在表空间中,具有以下特点:  <1> 数据的基本存储单元  <2> 二维结构 行:又称为‘记录’ 列:又称为‘字段或域’  <3&g ...

  2. 在Load average 高的情况下如何鉴别系统瓶颈

    在Load average 高的情况下如何鉴别系统瓶颈.是CPU不足,还是io不够快造成? 或是内存不足? 一:查看系统负载vmstat procs -----------memory-------- ...

  3. php批量导出pdf文件的脚本(html-PDf)

    背景:突然有大量的文件需要导出成PDF文件,写一个批量导出pdf的脚本,同时文件的命名也需要有一定的规则 导出方式:向服务器中上传csv文件,csv文件中包含文件的地址和相对应的文件命名. 如下格式: ...

  4. 《JAVA与模式》之模板方法模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  5. layer_mobile的简单使用

    layer mobile弹层组件是为移动设备(手机.平板等webkit内核浏览器/webview)量身定做的弹层UI. 由于是采用原生 JavaScript编写,所以并不依赖任何第三方库. layer ...

  6. linux安装应用程序

    实验:为 Linux 主机安装应用程序   环境:vmware workstation 14  . redhad-server-6.4 需求:1.使用 RPM 包的方式安装 Mozilla Firef ...

  7. SSH远程连接服务

    一.SSH 原理图 二.SSH 原理描述 2.1:什么是SSH SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候 ...

  8. PL/SQL DEVELOPER数字超长显示了科学计数法

    问题: 最近在做项目中,ID使用了长整形,10进制数值大约长度17位,在pl/sql developer 上数值由科学计数法显示. 在查看时不是很方便,且数值进行了省略显示,不准确. 解决方法: 在t ...

  9. Android 开发工具类 31_WebService 获取手机号码归属地

    AndroidInteractWithWebService.xml <?xml version="1.0" encoding="utf-8"?> & ...

  10. 配置alibaba的yum 源

    1, 进入yum源目录 cd /etc/yum.repos.d 2, 备份系统yum配置文件 sudo mv CentOS-Base.repo CentOS-Base.repo.bak 3, 下载al ...