只看一个象限简化问题,最后答案乘4+4

象限里面枚举x, 在当前这条固定的平行于y轴的直线中

分成长度为x的一段段。符合题目要求的点gcd(x,y) = 1

那么第一段1<= y <= x,个数为phi(x)个,即是x的欧拉函数值

第二段x+1 <= y <= 2x, 因为gcd(x + i, x) = gcd(x, i)

接下来同理

一直到最后一段

kx + 1 <= y <= b要单独一个个算,因为最后一段的长度不一定为x

感觉这道题算每一条直线时分成长度为x的一段段很巧妙,不好想到

#include<cstdio>
#include<cmath>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; typedef long long ll; int phi(int n)
{
int ans = n;
for(int i = 2; i * i <= n; i++)
if(n % i == 0)
{
ans = ans / i * (i - 1);
while(n % i == 0) n /= i;
}
if(n > 1) ans = ans / n * (n - 1);
return ans;
} int gcd(int a, int b) { return !b ? a : gcd(b, a % b); } ll f(int a, int b)
{
ll ans = 0;
REP(x, 1, a + 1)
{
int k = b / x;
ans += phi(x) * k;
REP(y, k*x + 1, b + 1)
if(gcd(x, y) == 1)
ans++;
}
return 4 * ans + 4;
} int main()
{
int a, b;
while(~scanf("%d%d", &a, &b) && a)
{
ll K = f(a, b);
ll N = (ll)(2 * a + 1) * (2 * b + 1) - 1;
printf("%.7lf\n", (double)K / N);
}
return 0;
}

最新文章

  1. Android 学习笔记多媒体技术之 AsyncTask+实现音频播放...
  2. 重构第14天 分离职责(Break Responsibilities)
  3. 李洪强iOS开发之零基础学习iOS开发【02-C语言】03-关键字、标识符、注释
  4. 关于tomcat不支持put方式的解决方式
  5. DOS批处理命令-if语句
  6. HBase在京东的完善与创新
  7. Android开发手记(25) 简单Service的实现
  8. MD中bitmap源代码分析--数据结构
  9. html系列教程--embed fieldset legend figure figurecaption
  10. VS2017编译SNMP++步骤记录
  11. WPF自定义控件(四)の自定义控件
  12. python服务器文件上传下载+GUI【tkinter】
  13. tomcat 报错处理
  14. 【2017-2-26】C#String类、Math类、DateTime类
  15. 【做题】arc070_f-HonestOrUnkind——交互+巧妙思维
  16. PHP开发微信公众号(一)二维码的获取
  17. Oracle错误代码ORA-01653,表空间容量无法扩展
  18. 简单CSS3动画
  19. [Java][Servlet] Cannot call sendRedirect() after the response has been committed
  20. java课程设计全程实录——第0天

热门文章

  1. CentOS 安装 MySQL8
  2. 「JavaSE 重新出发」02.01 基本数据类型
  3. 解决Windows下git需要每次都要ssh-add的问题
  4. LayUI加载js无效问题
  5. C语言运行时数据结构
  6. useradd: cannot open /etc/passwd
  7. Qt之图形(QPainter的基本绘图)
  8. LeetCode——Longest Common Prefix
  9. 【linux驱动分析】misc设备驱动
  10. Pixhawk---烧写FMU/IO bootloader