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

盗图来自:http://blog.csdn.net/z690933166/article/details/11896565

#include<cstdio>
#include<iostream>
#define N 10000010
#define lon long long
using namespace std;
int mul[N],prime[N],num,g[N],sum[N],f[N];
lon ans,n,m;
void get_prime(){
mul[]=;
for(int i=;i<N;i++){
if(!f[i]) prime[++num]=i,mul[i]=-,g[i]=;
for(int j=;j<=num&&i*prime[j]<N;j++){
f[i*prime[j]]=;
if(i%prime[j]) mul[i*prime[j]]=-mul[i],g[i*prime[j]]=mul[i]-g[i];
else {
mul[i*prime[j]]=;g[i*prime[j]]=mul[i];break;
}
}
}
for(int i=;i<N;i++) sum[i]=sum[i-]+g[i];
}
int main(){
get_prime();
int T;scanf("%d",&T);
while(T--){
scanf("%lld%lld",&n,&m);
if(n>m) swap(n,m);
ans=;
for(lon i=,last=;i<=n;i=last+){
last=min(n/(n/i),m/(m/i));
ans+=(n/i)*(m/i)*(sum[last]-sum[i-]);
}
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. Android客户端和服务器端数据交互
  2. 将Vuforia程序发布到Windows10系统的基本流程
  3. IIS7 全新管理工具AppCmd.exe的命令使用实例分享
  4. C#实现Windows服务
  5. c#简要概括面向对象的三大特征
  6. MYSQL 连接数据库命令收藏
  7. bootstrap日期控件在火狐下的模态框中选择时间下拉菜单无效的解决办法
  8. jquery事件重复绑定的快速解决方法
  9. 上线踩坑引发的处理方式---lsof,strace
  10. PHP生成图片验证码demo【OOP面向对象版本】
  11. Python【基础第二篇】
  12. Extjs Cmd 学习笔记
  13. Python学习笔记2-Python神奇的语法和格式化输出
  14. Android开发(30)--AutoCompleteTextView和MultiAutoCompleteTextView自动提示输入内容
  15. 机器学习 | 从加法模型讲到GBDT算法
  16. Selenium2Lib库之输入常用关键字实战
  17. 联网请求数据:Android篇
  18. EOS与以太坊有哪些区别?
  19. [BZOJ 2083] [POI 2010] Intelligence test
  20. STS-创建spring配置文件

热门文章

  1. Dojo常用函数
  2. javaweb基础(12)_session详解
  3. java用org.apache.poi包操作excel
  4. Linux常用命令-----------------磁盘挂载命令
  5. poj1654 Area
  6. 【NOIP2017提高组模拟7.3】B
  7. 概括的描述一下Spring注册流程
  8. 怎样处理jmeter中文乱码
  9. nginx静态资源web服务
  10. LeetCode(224) Basic Calculator