bzoj 2820 / SPOJ PGCD 莫比乌斯反演
那啥bzoj2818也是一样的,突然想起来好像拿来当周赛的练习题过,用欧拉函数写掉的。
求$(i,j)=prime$对数
\begin{eqnarray*}\sum_{i=1}^{n}\sum_{j=1}^{m}[(i,j)=p]&=&\sum_{p=2}^{min(n,m)}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}[i⊥j]\newline&=&\sum_{p=2}^{min(n,m)}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\sum_{d|(i,j)}{\mu(d)}\newline&=&\sum_{p=2}^{min(n,m)}\sum_{d}^{\lfloor\frac{min(n,m)}{p}\rfloor}{\mu(d)}\lfloor\frac{n}{pd}\rfloor\lfloor\frac{m}{pd}\rfloor\end{eqnarray*}
枚举质数的倍数,预处理好,最后底数优化一下。
/** @Date : 2017-09-09 00:24:45
* @FileName: bzoj 2820 莫比乌斯反演.cpp
* @Platform: Windows
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version : $Id$
*/
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e7+20;
const double eps = 1e-8; int pri[N];
int mu[N];
LL sum[N];
int c = 0;
bool vis[N]; void mobius()
{
MMF(vis);
MMF(mu);
mu[1] = 1;
for(int i = 2; i < N; i++)
{
if(!vis[i])
pri[c++] = i, mu[i] = -1;
for(int j = 0; j < c && i * pri[j] < N; j++)
{
vis[i * pri[j]] = 1;
if(i % pri[j] == 0)
{
mu[i * pri[j]] = 0;
break;
}
else mu[i * pri[j]] = -mu[i];
}
}
for(int i = 0; i < c; i++) //预处理 mu[dp/p]
for(int j = 1; j * pri[i] < N; j++)
sum[j * pri[i]] += mu[j];
for(int i = 1; i < N; i++)
sum[i] += sum[i - 1];
} int main()
{
mobius();
int T;
cin >> T;
while(T--)
{
LL n, m;
scanf("%lld%lld", &n, &m);
LL ans = 0;
LL mi = min(n, m);
LL last;
for(int i = 1; i <= mi; i = last + 1)
{
last = min(n/(n/i), m/(m/i));
ans += (n / i) * (m / i) * (sum[last] - sum[i - 1]);
}
printf("%lld\n", ans);
}
return 0;
}
bzoj 2820 / SPOJ PGCD 莫比乌斯反演的更多相关文章
- SPOJ PGCD(莫比乌斯反演)
传送门:Primes in GCD Table 题意:给定两个数和,其中,,求为质数的有多少对?其中和的范围是. 分析:这题不能枚举质数来进行莫比乌斯反演,得预处理出∑υ(n/p)(n%p==0). ...
- BZOJ 2440 完全平方数(莫比乌斯反演+二分查找)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23362 题意:定义含有平方数因子的数为完全平方数(平方数因子不包含 ...
- BZOJ 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2321 Solved: 1187[Submit][Status ...
- 【BZOJ】2693: jzptab 莫比乌斯反演
[题意]2154: Crash的数字表格 莫比乌斯反演,多组询问,T<=10000. [算法]数论(莫比乌斯反演) [题解]由上一题, $ans=\sum_{g\leq min(n,m)}g\s ...
- BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)
题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 2301 Problem b (莫比乌斯反演+容斥)
这道题和 HDU-1695不同的是,a,c不一定是1了.还是莫比乌斯的套路,加上容斥求结果. 设\(F(n,m,k)\)为满足\(gcd(i,j)=k(1\leq i\leq n,1\leq j\le ...
- Bzoj 2190 仪仗队(莫比乌斯反演)
题面 bzoj 洛谷 题解 看这个题先大力猜一波结论 #include <cstdio> #include <cstring> #include <algorithm&g ...
随机推荐
- 有关rand(),srand()产生随机数学习总结
看到夏雪冬日的有关rand()和srand()产生随机数的总结,挺好的,学习了,然后又有百度其他人的成果,系统总结一下.本文转自夏雪冬日:http://www.cnblogs.com/heyongga ...
- Spring中jdbc Template使用
http://1358440610-qq-com.iteye.com/blog/1826816
- vim 末行模式简单练习
练习 1 . 复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符 :%s#^[[:space:]]\+##g ...
- mysql中事务
事务控制语言 什么叫做“事务”: 想象一个场景: 小明给小花 汇款 5000元 买 IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行: update 存款表 set ...
- Maven 私服安装和启动
在安装私服的时候容易碰到的两个问题,一个是安装时拒绝访问,另一个是安装完成后服务无法启动: 拒绝访问问题: 原因:没有以管理员身份运行 cmd 解决办法: 如果是 win7 的话,可以直接在 [运行- ...
- DIH增量、定时导入并检索数据--转载
原文地址:http://www.ifunit.com/984/solr%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%BA%94%EF%BC%89dih%E5%A2%9E%E9%87%8 ...
- 【开发工具IDE】JAVA-eclipse使用汇集
-------------------------------------------------------------------------------------------------- 1 ...
- [COGS1000]伊吹萃香 最短路
1000. [東方S2] 伊吹萃香 输入文件:suika.in 输出文件:suika.out 简单对比 时间限制:1 s 内存限制:128 MB Problem 4 伊吹萃香(suika. ...
- HDU 4383 To The Moon 解题报告
HDU 4383 To The Moon 题意翻译 已知一个长为\(n\)的序列\(a\),你需要进行下面的四种操作. C l r d 将区间\([l,r]\)中的数加上\(d\),同时时间加\(1\ ...
- 《Java程序设计》第九周学习总结 20165218 2017-2018-2
20165218 2017-2018-2 <Java程序设计>第9周学习总结 教材学习内容总结 第13章 Java网络编程 URL类 位于java.net包,使用URL创建对象的应用程序称 ...