http://www.lydsy.com/JudgeOnline/problem.php?id=2301

题意:给a,b,c,d,k,求gcd(x,y)==k的个数(a<=x<=b,c<=y<=d)

思路:假设F(a,b)代表gcd(x,y)==k 的个数(1<=x<=a,1<=y<=b)

那么这是满足区间加减的

ans=F(b,d)-F(b,c)-F(a,d)+F(a,c)

剩下的就和Zap一样了

 #include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
int mul[],p[],mark[],sum[];
int read(){
char ch=getchar();int t=,f=;
while (ch<''||ch>''){if (ch=='') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void init(){
mul[]=;
for (int i=;i<=;i++){
if (!mark[i]){
p[++p[]]=i;
mul[i]=-;
}
for (int j=;j<=p[]&&p[j]*i<=;j++){
mark[i*p[j]]=;
if (i%p[j]) mul[p[j]*i]=mul[i]*(-);
else{
mul[p[j]*i]=;
break;
}
}
}
sum[]=;
for (int i=;i<=;i++) sum[i]=sum[i-]+mul[i];
}
int cal(int a,int b){
if (a>b) std::swap(a,b);
int res=;
for (int i=,j;i<=a;i=j+){
j=std::min(a/(a/i),b/(b/i));
res+=(a/i)*(b/i)*(sum[j]-sum[i-]);
}
return res;
}
int main(){
int T=read();
init();
while (T--){
int a=read(),b=read(),c=read(),d=read(),k=read();
a--;c--;
printf("%d\n",std::max(,cal(b/k,d/k)+cal(a/k,c/k)-cal(b/k,c/k)-cal(a/k,d/k)));
}
}

最新文章

  1. 23.备忘录模式(Memento Pattern)
  2. 日期选择器:jquery datepicker的使用
  3. 数据库函数--nvl、coalesce、decode比较
  4. luigi学习8--使用中央调度器
  5. 教你50招提升ASP.NET性能(九):显式的使用using语句减少内存泄露
  6. Master Nginx(4) - Nginx as a Reverse Proxy
  7. sql2008R2数据库备份--双机备份
  8. linux 套接字编程入门--Hello World
  9. redis 编译安装(生产环境推荐)
  10. RecyclerView 与 Scrollview 搭配使用的两个坑
  11. 【带着canvas去流浪】(2)绘制折线图
  12. C# 返回JSON格式化统一标准
  13. Java线程实现与安全
  14. Shell脚本2
  15. java 使用CXF将wsdl文件生成客户端代码命令java调用第三方的webservice应用实例
  16. Linux CPU信息和使用情况查看(CentOS)
  17. Android SDK版本号与API Level 的对应关系-转
  18. HDU 6092 Rikka with Subset(dp)
  19. solr6.3根据搜索关键词词频(关键词出现次数、关键词highlight)进行排序
  20. Oracle中查询表字段基本信息、主键、外键(整理)

热门文章

  1. keil c51中C程序的启动过程
  2. C++ crash 堆栈信息获取(三篇文章)
  3. PowerShell 管道和对象成员
  4. Vim 默认开启行号、语法显示等设置
  5. VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
  6. Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入
  7. QQ聊天界面的布局和设计(IOS篇)-第二季
  8. web应用的发布
  9. add.fun.php
  10. jquery.validate详解二