题链:

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

题解:

莫比乌斯反演

先看看这个题,BZOJ 2154 Crash的数字表格,本题的升级版:改为了多组数据。

既然是多组数据,那么之前的$O(N)$的方法就不行了。

现在需要对求ANS的式子进行优化,看看能不能降低复杂度。

$ANS=\sum_{g=1}^{min(n,m)}g\times \sum_{d=1}^{min(\lfloor \frac{n}{g} \rfloor,\lfloor \frac{m}{g} \rfloor)} \mu(d)d^2sum(\lfloor \frac{n}{gd} \rfloor,\lfloor \frac{m}{gd} \rfloor)$

令$D=gd$,然后去枚举D,则

$\quad\quad=\sum_{D=1}^{min(n,m)}sum(\lfloor \frac{n}{D} \rfloor,\lfloor \frac{m}{D} \rfloor) \sum_{d|D} \frac{D}{d}\mu(d)d^2$

$\quad\quad=\sum_{D=1}^{min(n,m)}sum(\lfloor \frac{n}{D} \rfloor,\lfloor \frac{m}{D} \rfloor) \sum_{d|D} dD\times\mu(d)$

令$w[D]=\sum_{d|D} dD\times\mu(d)$,所以

$ANS=\sum_{D=1}^{min(n,m)}sum(\lfloor \frac{n}{D} \rfloor,\lfloor \frac{m}{D} \rfloor) w[D]$

如果可以求出$w[D]$的值,那么这个求ANS的式子就可以用上向下取整的特性,以$O(\sqrt N)$的复杂度求出。

而至于$w[D]$求法,注意到这个也是积性函数,可以在线性筛时求出:

1.对于一个质数p,$w[p]=1\times p\times 1+p\times p \times(-1)$

2.对于枚举到的i和质数p,

  如果i%p!=0,则运用积性函数的性质:$w[i\times p]=w[i]\times w[p]$

  否则,不难发现,新增的p导致产生的其他加项中$\mu(d)=0$,所以直接$w[i\times p]=w[i]\times p$

(w[ ]的推导仔细想想哈,其实并不麻烦的)

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 10000050
using namespace std;
const int mod=100000009;
int w[MAXN],pw[MAXN];
void Sieve(){
static bool np[MAXN];
static int prime[MAXN],pnt;
w[1]=1,pw[1]=1;
for(int i=2;i<=10000000;i++){
if(!np[i]) prime[++pnt]=i,w[i]=((1ll*i-1ll*i*i%mod)%mod+mod)%mod;
for(int j=1;j<=pnt&&i<=10000000/prime[j];j++){
np[i*prime[j]]=1;
if(i%prime[j]) w[i*prime[j]]=((-1ll*w[i]*prime[j]%mod*prime[j]%mod+mod)%mod+1ll*w[i]*prime[j]%mod)%mod;
else{w[i*prime[j]]=1ll*w[i]*prime[j]%mod; break;}
}
pw[i]=(1ll*pw[i-1]+w[i])%mod;
}
}
int sum(int n,int m){
return ((1ll*(1+n)*n/2%mod)*(1ll*(1+m)*m/2%mod))%mod;
}
int main(){
Sieve(); int Case,n,m,ans,mini;
scanf("%d",&Case);
for(int i=1;i<=Case;i++){
scanf("%d%d",&n,&m);
ans=0; mini=min(n,m);
for(int d=1,last;d<=mini;d=last+1){
last=min(n/(n/d),m/(m/d));
ans=(1ll*ans+1ll*(pw[last]-pw[d-1]+mod)%mod*sum(n/d,m/d)%mod)%mod;
}
printf("%d\n",(ans+mod)%mod);
}
return 0;
}

  

●BZOJ 2693 jzptab的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  2. [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

    题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑N​y=1∑M​lim(x, ...

  3. bzoj 2693: jzptab 线性筛积性函数

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 444  Solved: 174[Submit][Status][Discus ...

  4. BZOJ 2693: jzptab [莫比乌斯反演 线性筛]

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1194  Solved: 455[Submit][Status][Discu ...

  5. BZOJ 2693: jzptab( 莫比乌斯反演 )

    速度居然#2...目测是因为我没用long long.. 求∑ lcm(i, j) (1 <= i <= n, 1 <= j <= m) 化简之后就只须求f(x) = x∑u( ...

  6. BZOJ 2693 jzptab

    http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题解: 考虑把lcm转化成gcd那答案就是然后神奇的设:就有:一样可以枚举 的取值,这是O(√ ...

  7. BZOJ 2693 jzptab ——莫比乌斯反演

    同BZOJ 2154 但是需要优化 $ans=\sum_{d<=n}d*\sum_{i<=\lfloor n/d \rfloor} i^2 *\mu(i)* Sum(\lfloor \fr ...

  8. 【刷题】BZOJ 2693 jzptab

    Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample Input 1 4 5 Sa ...

  9. BZOJ 2693: jzptab 莫比乌斯反演 + 积性函数 +筛法

    Code: #include<bits/stdc++.h> #define ll long long #define M 10001000 #define maxn 10200100 #d ...

随机推荐

  1. 第五次作业-需求&原型改进

    需求&原型改进 0. 团队介绍 团队名称:121ComeOn 项目名称:个人博客项目 团队组成: PM:黄金筱(107) 成员:王枫(031),刘烨(255),周明浩(277) github地 ...

  2. 20162320刘先润第三周Bag类测试

    前言 以下内容是本周Bag代码的课后作业,要求是完成伪代码.产品代码和测试代码,为了书写方便我将伪代码以注释的形式写在了产品代码的后面 测试步骤 1.首先对Bag类引用BagInterface的代码进 ...

  3. wireshark抓包分析tcp连接与断开

    其实对于网络通信的学习,最好还是能够自己抓到包详细地一下,不然只单单通过文字和图的描述印象不够深刻.本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的. 首先需要去https://www.wir ...

  4. nyoj 对决

    对决 时间限制:1000 ms  |  内存限制:65535 KB 难度:0   描述 Topcoder 招进来了 n 个新同学,Yougth计划把这个n个同学分成两组,要求每组中每个人必须跟另一组中 ...

  5. JAVA_SE基础——67.System类

    System类对大家都不陌生吧! 以前经常需要打印结果时使用的都是"System.out.println()"语句,这句代码中就使用了System类.System类定义了一些与系统 ...

  6. linux的链接工具secure设置字体大小和颜色

  7. js 中bind

    function fn(a){ this.innerHTML = a; console.log(this); } //fn("hello"); span1.onclick =fun ...

  8. C# 使用 ffmpeg 进行音频转码

    先放一下 ffmpeg 的官方文档以及下载地址: 官方文档:http://ffmpeg.org/ffmpeg.html 下载地址:http://ffmpeg.org/download.html 用 f ...

  9. Java KeyTool command

    Create a new key: keytool -genkey -alias keyAlias -keyalg RSA  -validity 1000 -keystore d:\keyPath\k ...

  10. VMware vCenter Server 6.5.0 U1

    VMware vCenter Server 6.5.0 U1gName: VMware-VCSA-all-6.5.0-8024368.iso Release Date: 2018-03-20 Buil ...