题目大意

有不超过\(50000\)个询问,每次询问有多少正整数对\(x\),\(y\),满足\(x\leqslant a\),\(y \leqslant b\),并且\(gcd(x,y)=c\)。其中\(a,b,c\leqslant 50000\)

解题思路

我们发现

\[Ans=f(n)=\sum_{x=1}^{a}\sum_{y = 1}^{b}[gcd( i, j)=c]
\]

当括号内表达式为真时,值为\(1\),否则为\(0\)。

同时,我们设

\[F(n)=\sum_{n|d}f(d)=\lfloor\frac{a}{n}\rfloor\lfloor\frac{b}{n}\rfloor
\]

由莫比乌斯反演,我们得

\[f(d)=\sum_{d|n}\mu(\frac{n}{d})F(n)=\sum_{d|n}\mu(\frac{n}{d})\lfloor\frac{a}{n}\rfloor\lfloor\frac{b}{n}\rfloor=\sum_{i=1}^{min(\lfloor\frac{a}{n}\rfloor,\lfloor\frac{b}{n}\rfloor)}\mu(i)\lfloor\frac{a}{ni}\rfloor\lfloor\frac{b}{ni}\rfloor
\]

到这里,我们通过预处理\(\mu\)的前缀和和整除分块,就可以在\(O(T*\sqrt{n})\)解决。

参考程序

// luogu-judger-enable-o2
#include <bits/stdc++.h>
#define LL long long
using namespace std; const LL Maxn = 50010;
LL Mu[ Maxn ], Sum[ Maxn ];
int Vis[ Maxn ];
LL Num;
LL Prime[ Maxn ]; void Init() {
Mu[ 1 ] = 1;
for( LL i = 2; i <= Maxn; ++i ) {
if( !Vis[ i ] ) Mu[ i ] = -1, Prime[ ++Num ] = i;
for( LL j = 1; j <= Num && Prime[ j ] * i <= Maxn; ++j ) {
Vis[ Prime[ j ] * i ] = 1;
if( i % Prime[ j ] == 0 ) break;
Mu[ i * Prime[ j ] ] = -Mu[ i ];
}
}
for( LL i = 1; i <= Maxn; ++i ) Sum[ i ] = Sum[ i - 1 ] + Mu[ i ];
return;
} void Work() {
LL a, b, c;
scanf( "%lld%lld%lld", &a, &b, &c );
if( a > b ) swap( a, b );
LL Ans = 0;
for( LL x = 1, y; x <= a / c; x = y + 1 ) {
y = min( ( a / c ) / ( ( a / c ) / x ), ( b / c ) / ( ( b / c ) / x ) );
Ans += a / c / x * ( b / c / x ) * ( Sum[ y ] - Sum[ x - 1 ] );
}
printf( "%lld\n", Ans );
return;
} int main() {
Init();
LL t; scanf( "%lld", &t );
for( ; t; --t ) Work();
return 0;
}

最新文章

  1. no-jquery 01Elements
  2. vijos p1002 dp ***
  3. WebApp JS 打开 app
  4. 解决方案:Default Activity Not Found !
  5. POJ 3084 Panic Room (最小割建模)
  6. IntelliJ IDEA 13怎么创建JAVA SE项目
  7. nyoj 76
  8. div没有设置高度时背景颜色不显示(浮动)
  9. hibernate框架(4)---主键生成策略
  10. 一道笔试题来理顺Java中的值传递和引用传递
  11. 个人作业-Week1(新增详细说明)
  12. TERMIOS详解【转】
  13. Vue.js $nextTick
  14. Linux内核分析(第三周)
  15. Java练习之使用StringBuilder
  16. [Asp.net mvc]国际化
  17. 【javascript】javascript设计模式mixin模式
  18. linux部署maven
  19. 【推导】【凸包】MIPT-2016 Pre-Finals Workshop, Taiwan NTU Contest, Sunday, March 27, 2016 Problem D. Drawing Hell
  20. CentOS 6.9/Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

热门文章

  1. Codeforces 1237E. Balanced Binary Search Trees
  2. WPF跨线程操作UI界面控件
  3. JavaScript中with不推荐使用,为什么总是出现在面试题中?
  4. 可能是全网最全的http面试答案
  5. lumen时区
  6. 链接进入react二级路由,引发的子组件二次挂载
  7. linux命令详解——iostat
  8. fragment事务 的基本处理
  9. datePicker 及 timePicker 监听事件 获取用户选择 年月日分秒信息
  10. Git学习笔记(2)-Eclipse中Git插件使用