Description

神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种
傻×必然不会了,于是向你来请教……多组输入

Input

第一行一个整数T 表述数据组数接下来T行,每行两个正整数,表示N, M

Output

T行,每行一个整数表示第i组数据的结果

Sample Input

2
10 10
100 100

Sample Output

30
2791

HINT

T = 10000

N, M <= 10000000


  题目大意 (题目太简洁不需要大意)。

  根据常用套路,我们有

  

  显然TLE,为了更好的分段计算,所以考虑把后面两个向下取整取整的分数挪出来。于是得到了下面这个优美的式子:

  现在就来考虑后面那个求和。

  考虑莫比乌斯函数的性质和p为质数。

  1)当T存在一个质因子的指数超过2,显然对答案贡献为0

  2)当T存在超过1个质因子的指数为2,显然对答案贡献为0

  3)当T只存在1个质因子的指数为2,那么当且仅当p的值为这个质因子时,对答案才有贡献,这个贡献为-1的不同质因子次幂。

  4)当T的质因子的指数均为1,那么对答案的贡献为T的质因子个数乘-1的不同质因子个数减一 次幂。

  显然可以用线性筛预处理出这个的值的前缀和,这样就可以做到单次查询根号级别。

  至于如何用线性筛预处理,我记录了一个enable表示是否存在1个质因子的指数大于等于2和defp表示不同的质因子的个数。详细的过程请看代码。

Code

 /**
* bzoj
* Problem#2820
* Accepted
* Time:4708ms
* Memory:141912k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean; #define LL long long const int limit = 1e7; int num = ;
int prime[];
boolean vis[limit + ];
boolean enable[limit + ];
LL g[limit + ];
int defp[limit + ];
inline void Euler() {
memset(vis, false, sizeof(vis));
memset(enable, true, sizeof(enable));
g[] = g[] = ;
for(int i = ; i <= limit; i++) {
if(!vis[i]) prime[num++] = i, g[i] = , defp[i] = ;
for(int j = ; j < num && i * 1LL * prime[j] <= limit; j++) {
int c = i * prime[j];
vis[c] = true;
if(i % prime[j]) {
defp[c] = defp[i] + ;
enable[c] = enable[i];
g[c] = (enable[i]) ? ((defp[c]) * ((defp[c] & ) ? () : (-))) : (-g[i]);
} else {
defp[c] = defp[i];
enable[c] = false;
g[c] = (enable[i]) ? ((defp[c] & ) ? (-) : ()) : ();
break;
}
}
}
for(int i = ; i <= limit; i++)
g[i] += g[i - ];
// cout << num << endl;
// for(int i = 1; i <= 20; i++)
// cout << i << " " << g[i] << " " << defp[i] << endl;
} int n, m;
inline void init() {
scanf("%d%d", &n, &m);
} inline void solve() {
if(n > m) swap(n, m);
LL res = ;
for(int i = , j; i <= n; i = j + ) {
j = min(n / (n / i), m / (m / i));
res += (n / j) * 1LL * (m / j) * (g[j] - g[i - ]);
}
printf(Auto"\n", res);
} int T;
int main() {
Euler();
scanf("%d", &T);
while(T--) {
init();
solve();
}
return ;
}

bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛的更多相关文章

  1. [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)有多少对. ...

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

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

  3. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

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

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

  5. BZOJ 2820 YY的GCD ——莫比乌斯反演

    我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做 ...

  6. BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...

  7. BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]

    题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...

  8. BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]

    题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...

  9. 【莫比乌斯反演】关于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( ...

随机推荐

  1. selenium元素单击不稳定解决方法

    selenium自动化测试过程中,经常会发现某一元素单击,很不稳定,有时候执行了点击没有反映. 以下总结两种解决方法:都是通过js注入的方式去点击. 1.F12查一看,要点击的按钮,或连接,有没有on ...

  2. hadoop2.4.1 伪分布

           最终的 /etc/profile :#在文件最后添加       # /etc/profile # System wide environment and startup program ...

  3. Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关

    Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关 那个上传图片太麻烦了,发布到百度文库了 http://wenku.baidu.com/view/b38ae8 ...

  4. Applegate 方法使用

    1. - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotif ...

  5. tcp_协议基础

    具体7层   数据格式 功能与连接方式 典型设备 应用层 Application 数据Data 网络服务与使用者应用程序间的一个接口 终端设备(PC.手机.平板等) 表示层 Presentation ...

  6. linux 命令杂集

    [1]查找日志中某个字符串XXXX tail -f  日志文件名 |  grep  "XXXX" [2]linux抓包命令 tcpdump -i XXX -A  ip xxx.xx ...

  7. awk和sed

    在正则表达式那章有两个比较好用的命令sed 和awk awk 是按指定分隔符分隔,默认空白键,第一个为$1,第二个为$2... 命令: FS分隔符

  8. mybatis源码解析6---MappedStatement解析

    MappedStatement类位于mybatis包的org.apache.ibatis.mapping目录下,是一个final类型也就是说实例化之后就不允许改变 MappedStatement对象对 ...

  9. flask渲染模板时报错TypeError: 'UnboundField' object is not callable

    渲染模板时,访问页面提示TypeError: 'UnboundField' object is not callable 检查代码,发现实例化表单类是,没有加括号:form = NewNoteForm ...

  10. bzoj2656 [Zjoi2012]数列(sequence)

    题目链接 好久没写高精度了,调了很久QAQ 如果直接递归计算答案的话肯定会T 发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西 我们只需要在递归的时候实时维护一个xx(an ...