P2257 YY的GCD

题目描述

神犇YY虐完数论后给傻×kAc出了一题

给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对

kAc这种傻×必然不会了,于是向你来请教……

多组输入

输入输出格式

输入格式:

第一行一个整数T 表述数据组数

接下来T行,每行两个正整数,表示N, M

输出格式:

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

输入输出样例

输入样例#1: 复制

2
10 10
100 100
输出样例#1: 复制

30
2791

说明

T = 10000

N, M <= 10000000

思路:倍数莫比乌斯反演。

(太长时间没写字了。。

代码:

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e7 + ;
int t;
//线性筛法求莫比乌斯函数
bool vis[N + ];
int pri[N + ];
int mu[N + ];
ll sum[N];
int f[N];
void mus() {
memset(vis, , sizeof(vis));
memset(f,, sizeof(f));//f[n]=sum(mu[n/p])
mu[] = ;
int tot = ;
for (int i = ; i < N; i++) {
if (!vis[i]) {
pri[tot++] = i;
mu[i] = -;
}
for (int j = ; j < tot && i * pri[j] < N; j++) {
vis[i * pri[j]] = ;
if (i % pri[j] == ) {
mu[i * pri[j]] = ;
break;
}
else mu[i * pri[j]] = -mu[i];
}
}
for(int i=;i<N;i++)
for(int j=;j<tot&&pri[j]*i<N;j++) f[i*pri[j]]+=mu[i];//需要重复更新,不能放在线性筛内部
sum[]=;
for(int i=;i<N;i++) sum[i]=sum[i-]+f[i];
}
int n,m,k;
ll cal(int x,int y){
int ma=min(x,y);
ll res=;
for(int i=,j;i<=ma;i=j+){
j=min(x/(x/i),y/(y/i));
if(j>=ma) j=ma;
res+=1ll*(sum[j]-sum[i-])*(x/i)*(y/i);
}
return res;
} int main() {
mus();
scanf("%d",&t);
for(int i=;i<=t;i++){
scanf("%d%d",&n,&m);
ll ans;
ans=cal(n,m);
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. invalidate()和postInvalidate() 的区别及使用
  2. 未备案域名打开国内服务器上的网站(绑定国外空间并判断url后跳转引用)
  3. Apache Traffic Server(ats)
  4. qweb
  5. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中
  6. hdu 4324 Triangle LOVE(拓扑排序,基础)
  7. iOS-系统定位功能
  8. NetBeans工具学习之道:NetBeans的(默认)快捷键
  9. replication across two data centers
  10. Shell特殊变量列表
  11. Leetcode389
  12. 《Shell脚本学习指南》学习笔记之自定义函数
  13. Java Reference 源码分析
  14. JS中的类型识别
  15. a标签文字选中后的颜色样式更改
  16. String类详解
  17. 关于jsp中jstl-core标签循环遍历的使用
  18. iOS调用第三方导航和线路规划
  19. 局部变量and全局变量
  20. oracle compile 编译无效对象

热门文章

  1. selenium层级定位及鼠标键盘操作
  2. January 25 2017 Week 4 Wednesday
  3. nohup命令、setsid命令、Daemon(守护进程)简要梳理
  4. windows 安装redis并注册服务
  5. 可变长度参数以及foreach循环原理
  6. BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
  7. how to design Programs 学习笔记
  8. 在linux命令行中调试在OJ上的c++代码
  9. halcon 数字转字符串实现循环读取图片
  10. caffe 学习(2)——基本原理