【BZOJ2818】Gcd(莫比乌斯反演)

题面

Description

给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的

数对(x,y)有多少对.

Input

一个整数N

Output

如题

Sample Input

4

Sample Output

4

HINT

对于样例(2,2),(2,4),(3,3),(4,2)

1<=N<=10^7

题解

题目要求的:

\[\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)\_is\_prime]
\]

把因数提出来

\[\sum_{d=1}^{n}[d\_is\_prime]\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}[gcd(i,j)==1]
\]

后面那个不说了

很显然的莫比乌斯反演

参考这道题目,一模一样的东西

如果不考虑\(d\_is\_prime\)这个东西

很显然的数论分块

加上了这个限制

就再预处理一个素数个数的前缀和就行了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAX 10000000
#define ll long long
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,m;
bool zs[MAX+1000];
ll pri[MAX+1000],tot,smu[MAX+1000],spr[MAX+1000];
long long ans=0;
void pre()
{
zs[1]=true;smu[1]=1;
for(int i=2;i<=n;++i)
{
if(!zs[i])pri[++tot]=i,smu[i]=-1;
for(int j=1;j<=tot&&i*pri[j]<=n;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0){smu[i*pri[j]]=0;break;}
else smu[i*pri[j]]=-smu[i];
}
}
for(int i=1;i<=n;++i)smu[i]+=smu[i-1];
for(int i=1;i<=n;++i)spr[i]=spr[i-1]+(!zs[i]?1:0);
}
ll Solve(int a)
{
int i=1,j;
long long ret=0;
while(i<=a)
{
j=a/(a/i);
ret+=1ll*(smu[j]-smu[i-1])*(a/i)*(a/i);
i=j+1;
}
return ret;
}
int main()
{
n=read();
int i=1,j;
pre();
while(i<=n)
{
j=n/(n/i);
ans+=(spr[j]-spr[i-1])*Solve(n/i);
i=j+1;
}
printf("%lld\n",ans);
return 0;
}

【BZOJ2818】Gcd(莫比乌斯反演)的更多相关文章

  1. BZOJ2818: Gcd 莫比乌斯反演

    分析:筛素数,然后枚举,莫比乌斯反演,然后关键就是分块加速(分块加速在上一篇文章) #include<cstdio> #include<cstring> #include< ...

  2. [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)

    [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...

  3. 【BZOJ2818】Gcd [莫比乌斯反演]

    Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y&l ...

  4. HDU1695 GCD(莫比乌斯反演)

    传送门 看了1个多小时,终于懂了一点了 题目大意:给n,m,k.求gcd(x,y) = k(1<=x<=n, 1<=y<=m)的个数 思路:令F(i)表示i|gcd(x,y)的 ...

  5. hdu 1695 GCD 莫比乌斯反演入门

    GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...

  6. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  7. HYSBZ - 2818 Gcd (莫比乌斯反演)

    莫比乌斯反演的入门题,设 \(F(x): gcd(i,j)\%x=0\) 的对数,\(f(x): gcd(i,j)=x\)的对数. 易知\[F(p) = \lfloor \frac{n}{p} \rf ...

  8. Luogu P2257 YY的GCD 莫比乌斯反演

    第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...

  9. BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2534  Solved: 1129 [Submit][Status][Discu ...

  10. BZOJ 2820 luogu 2257 yy的gcd (莫比乌斯反演)

    题目大意:求$gcd(i,j)==k,i\in[1,n],j\in[1,m] ,k\in prime,n,m<=10^{7}$的有序数对个数,不超过10^{4}次询问 莫比乌斯反演入门题 为方便 ...

随机推荐

  1. jquery $(document).ready() 与window.onload的区别(转)

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 windo ...

  2. ★MySQL一些很重要的SQL语句

    [mysqldumpslow] -s 排序选项:c 查询次数 r 返回记录行数 t 查询时间  -t 只显示top n条查询  mysqldumpslow -s r -t 10000 slow-que ...

  3. java实现 redis的发布订阅(简单易懂)

    redis的应用场景实在太多了,现在介绍一下它的几大特性之一   发布订阅(pub/sub). 特性介绍: 什么是redis的发布订阅(pub/sub)?   Pub/Sub功能(means Publ ...

  4. 基于JDK1.8的LinkedList剖析

    之前写了一篇ArrayList,那么今天就写一篇他的姊妹篇,LinkedList. 众所周知,ArrayList底层数据是数组,可以在O(1)的时间内get到数据,但删除和插入就要O(n)时间复杂度. ...

  5. 第十八章 DjangoWeb开发框架

    第十八章 DjangoWeb开发框架 第一课 内容概要: 1.JS正则 -登录注册验证 2.组件 1.BootStrap -css -js 学习BootStrap规则 2.jQueryUI -css ...

  6. PHP实现网页爬虫

    抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐.LZ总结了几种常用的.易于实现的网页抓取方式,如果熟悉JQuery选择器,这几种框架会相当简单. 一 ...

  7. day4(while 、练习题)

    一.while ... else 方法 while else 的作用就是,确定循环正确执行完毕,else里面可以提示完成的情况. 二.练习题 1.编译型语言是编译完之后执行,解释性语言是边编译边执行, ...

  8. 《Java编程思想》读书笔记

    前言 这个月一直没更新,就是一直在读这本<Java编程思想>,这本书可以在Java业界被传神的一本书,无论谁谈起这本书都说好,不管这个人是否真的读过这本书,都说啊,这本书很好.然后再看这边 ...

  9. UART知识总结

    一.定义 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART. 二.时序 上图是uart协议传输一个"A" ...

  10. java:list排序

    第一种方法:就是list中对象(bean文件)实现Comparable接口,代码如下: package com.mapred.entity; public class Bar implements C ...