YY的GCD

给出T个询问,询问\(\sum_{i=1}^N\sum_{j=1}^M(gcd(i,j)\in prime)\),T = 10000,N, M <= 10000000。

显然质数是需要枚举的,设N<M,于是

\[ans=\sum_{p\in prime}\sum_{i=1}^N\sum_{j=1}^M(gcd(i,j)==p)
\]

于是设

\[f(p)=\sum_{i=1}^N\sum_{j=1}^M(gcd(i,j)==p)
\]

\[F(p)=\sum_{i=1}^N\sum_{j=1}^M(p|gcd(i,j))=[N/p][M/p]
\]

由Mobius反演定理,我们有

\[f(p)=\sum_{p|d}F(d)\mu(d/p)
\]

于是

\[ans=\sum_{p\in prime}\sum_{p|d}F(d)\mu(d/p)=\sum_{d=1}^NF(d)\sum_{p|d,p\in prime}\mu(d/p)
\]

显然后式是可以\(O(nlon(n))\)维护的,对F(d)进行整除分块即可。

参考代码

#include <iostream>
#include <cstdio>
#define il inline
#define ri register
#define ll long long
#define limit 10000000
#define swap(x,y) x^=y^=x^=y
using namespace std;
bool check[limit+1];
int mb[limit+1],prime[700000],pt,
opt[limit+1];ll ans;
il void read(int&);
il int min(int,int);
void pen(ll),prepare();
int main(){
int lsy,a,b,i,j;read(lsy);
prepare();while(lsy--){
read(a),read(b),ans&=0;
if(a>b)swap(a,b);
for(i=1;i<=a;i=j+1){
j=min(a/(a/i),b/(b/i));
ans+=(ll)(a/i)*(b/i)*(opt[j]-opt[i-1]);
}pen(ans),putchar('\n');
}
return 0;
}
void prepare(){
check[1]=mb[1]=1;
for(ri int i(2),j;i<=limit;++i){
if(!check[i])prime[++pt]=i,mb[i]=-1;
for(j=1;j<=pt&&prime[j]<=limit/i;++j){
check[i*prime[j]]|=true;
if(!(i%prime[j]))break;
mb[i*prime[j]]=-mb[i];
}
}for(ri int i(1),j;i<=pt;++i)
for(j=1;j*prime[i]<=limit;++j)
opt[j*prime[i]]+=mb[j];
for(ri int i(1);i<=limit;++i)opt[i]+=opt[i-1];
}
il int min(int a,int b){
return a<b?a:b;
}
void pen(ll x){
if(x>9)pen(x/10);putchar(x%10+48);
}
il void read(int &x){
x&=0;ri char c;while(c=getchar(),c<'0'||c>'9');
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
}

YY的GCD的更多相关文章

  1. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  2. [BZOJ2820]YY的GCD

    [BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  3. bzoj 2820 YY的GCD 莫比乌斯反演

    题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...

  4. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

  5. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  6. 【BZOJ 2820】 YY的GCD (莫比乌斯+分块)

    YY的GCD   Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  7. 【BZOJ2820】YY的GCD(莫比乌斯反演)

    [BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...

  8. 洛谷【P2257】YY的GCD

    YY的GCD 原题链接 这应该是我做的第一道莫比乌斯反演的题目. 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x ...

  9. 【BZOJ2820】YY的GCD

    [BZOJ2820]YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的( ...

随机推荐

  1. FB面经Prepare: Find Longest Path in a Multi-Tree

    给的多叉树, 找这颗树里面最长的路径长度 解法就是在子树里面找最大的两个(或一个,如果只有一个子树的话)高度加起来. 对于每一个treenode, 维护它的最高的高度和第二高的高度,经过该点的最大路径 ...

  2. 修改hostname

    修改hostname步骤 1. 修改/etc/sysconfig/network中的hostname选项 2. 在/etc/hosts中添加hostname对应的ip地址 3.执行命令:hostnam ...

  3. Oracle中hex和raw的相互转换

    可以参考以下语句: select hextoraw(rawtohex('你好')) from dual select utl_raw.cast_to_varchar2(hextoraw('E4BDA0 ...

  4. Excelpackage的简单使用(导出用户信息并保存)

    EPPlus介绍 EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件,在导出Excel的时候不需要电脑上安装office. ...

  5. centos7安装git

    1.安装git依赖包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUti ...

  6. IP通信基础的第一个星期

    IP通信基础不仅是很多专业课程的基础,同时学好它,在以后很多工作上都可以运用到,有网络工程师.通信工程师等等,当然,有些证书也会涉及到IP通信基础,有网络中级高级 CCNA等等. 那么,学好IP通信基 ...

  7. workbench使用小笔记(不定期持续更新)

    1. 删除不使用的工作空间 在使用workbench时,之前可能建了好几个工作空间,现在有一些不使用了,每次打开都能还能看到它们,对于强迫症来说多少有一些不爽.如下图: 现在,就把那些不使用的工作空间 ...

  8. k8s集群安装

    准备三台虚拟机,一台做master,两台做master节点,关闭selinux. 一.安装docker,两node节点上进行 1. 2.安装docker依赖包:yum install -y yum-u ...

  9. 算法(第四版)C# 习题题解——1.3

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  10. radhat6.6上安装oracle12c RAC (三)

    三.DB(database)安装 3.1 DB软件安装 orale用户登录,解压db安装包 [root@jydb1 tools]# su - oracle [oracle@jydb1 ~]$ cd / ...