Description

求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。

Input

r

Output

整点个数

Sample Input

4
Sample Output

4
HINT

n<=2000 000 000

Source

不要看见圆就以为是几何QwQ
这题其实TMD是数论啊(╯‵□′)╯︵┻━┻
推公式
x2+y2=r2 x^2+y^2=r^2所以 y2=r2−x2=(r+x)(r−x) y^2=r^2-x^2=(r+x)(r-x)
可以发现 r+x r+x和 r−x r-x必定存在一个最大公约数为d.
那么 y2=d2r+xdr−xd y^2=d^2\frac {r+x} d \frac {r-x} d
设后面那两个分式分别为A,B
那么一定有 Gcd(A,B)=1 Gcd(A,B)=1
观察 y2 y^2那个式子,既然 y2,d2 y^2,d^2都是完全平方数,那么A和B一定也是完全平方数(在不相等的情况下).
于是我们令 a2=A,b2=B a^2=A,b^2=B, a2+b2=2rd|a<b a^2+b^2=\frac {2r} d|a
2rd \frac {2r} d为一整数,所以d必定是2r的一个因子.
因此从 1 1到2r−−√\sqrt{2r}枚举d.
那么只有 2rmodd=0 2r \mod d=0时才会有答案出现.
注意出现答案时必须满足 A≠B A\neq B,A,B互质
我们知道,d是2r的约数有两种情况
①d 此时枚举a从1到 d2−−√ \sqrt \frac d 2, b=d−a2−−−−−√ b=\sqrt{d-a^2}
② 2rd \frac {2r} d 枚举a从1到 2r2d−−−√ \sqrt \frac {2r} {2d}, b=2rd−a2−−−−−−√ b=\sqrt{\frac {2r} d-a^2}
注意每次得到答案要进行检验使得A,B满足条件

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL r,ans;
LL gcd(LL a,LL b)
{return !b?a:gcd(b,a%b);
}
bool pd(LL a,double b)
{if (floor(b)==b){LL tmpb=(LL)(floor(b));if (gcd(tmpb*tmpb,a*a)==1&&tmpb*tmpb!=a*a)  return 1;}return 0;
}
int main()
{scanf("%lld",&r);for (LL d=1;d<=(LL)(sqrt(2*r));d++){if (2*r%d==0){for (LL a=1;a<=(LL)(sqrt((2*r)/(2*d)));a++){double b=sqrt(2*r/d-a*a);if (pd(a,b))    ans++;}if (d!=2*r/d){for (LL a=1;a<=(LL)(sqrt(d/2));a++){double b=sqrt(d-a*a);if (pd(a,b))    ans++;}}}}printf("%lld",ans*4+4);
}

【HAOI2008】【BZOJ1041】圆上的整点相关推荐

  1. bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点

    http://www.lydsy.com/JudgeOnline/problem.php?id=1041 设 X>0 ,Y>0 X^2 + Y^2 = R^2 X^2 = R^2-Y^2 ...

  2. bzoj 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2838  Solved: 1238 [Submit][S ...

  3. BZOJ1041:[HAOI2008]圆上的整点(数论)

    Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Samp ...

  4. bzoj1041 [HAOI2008]圆上的整点 gcd

    这个题非常恶心,因为条件很少,要求也很少,看起来没有任何特殊的性质 所以只能往约数.gcd上靠 然后就是 x^2=r^2-y^2=(r-y)(r+y) 设A=r-y, B=r+y 由于A*B是完全平方 ...

  5. 【codevs1867】【Tyvj3508】【BZOJ1041】圆上的整点,数学乱搞

    传送门1 传送门2 传送门3 写在前面:乱搞数学-- 思路: 原博文 有了上面的推理,那么实现的方法为: 枚举d∈[1,sqrt(2R)],然后根据上述推理可知:必先判d是否为2R的一约数. 此时d为 ...

  6. [BZOJ 1041] 圆上的整点

    Description 求一个给定的圆( x2+y2=r2 x 2 + y 2 = r 2 x^2+y^2=r^2),在圆周上有多少个点的坐标是整数 Input 只有一个正整数 n n n,n≤200 ...

  7. BZOJ 1041 圆上的整点 数学

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1041 题目大意: 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是 ...

  8. 2019 ICPC 上海站网络赛 K.Peekaboo (圆上整点)

    https://nanti.jisuanke.com/t/41421 题意:给定平面上两个点到原点之间的距离aaa和bbb以及这两点之间的距离ccc,且这两点的坐标均是整数,求该两点可能的坐标,按字典 ...

  9. 【BZOJ】【1041】【HAOI2008】圆周上的点

    数学 orz hzwer 完全不会做-- 很纠结啊,如果将来再遇到这种题,还是很难下手啊-- 引用题解: [分析]: 样例图示: 首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否 ...

最新文章

  1. HDOJ(HDU) 1977 Consecutive sum II(推导、、)
  2. nginx配置文件防盗链
  3. leetcode面试题 08.03. 魔术索引(二分)
  4. 推导基姆拉尔森公式根据日期计算星期
  5. Qt实践录:串口调试助手
  6. brctl 设置ip_docker配置独立桥接IP的方法
  7. 自定义类加载器与热部署
  8. 思维导图软件哪个好?盘点10款好用的思维导图软件
  9. 飞鹅云打印机api接口asp版,asp源码对接飞鹅云小票打印机
  10. odroid-xu4(ubuntu mate 16.04)源码编译opencv 3.2
  11. 用Unity做游戏,你需要深入了解一下IL2CPP
  12. 计算机与网络之间是红叉,雨林木风win7系统网络连接出现红叉无法上网的解决办法...
  13. GitHub在Markdown上乱哄哄 - 将666更改为DCLXVI
  14. 详解PHP设置定时任务的实现方法
  15. 需求评审会如何做才不会沦为形式主义
  16. 将图片做成gif动态图
  17. 腾讯公司移动互联网的运营与营销
  18. java fresh 水果,《蓝莓甜杏面包/ Fresh Apricot and Blueberry Tea Bread》把水果做进面包里...
  19. “中关村黑马程序员训练营”练习题(二)
  20. IP 反查地址开源项目 ip2region

热门文章

  1. 【翻译】比较Pgpool-II和PgBouncer
  2. 转贴:连个黄网都找不到,你还能干什么
  3. 电阻信号隔离器0-100欧姆转0-20MA/0-75MV电位器模拟信号变送器
  4. 分析网站原始访问日志
  5. Python 数据分析 泰坦尼克经典案例
  6. 解决安卓Android7.0兼容问题
  7. URAL 1268. Little Chu 求最大原根
  8. 郭明錤:预计2022年Meta头显总体发货量将达到1200万台
  9. git更换新地址操作步骤
  10. Web——Spring Reactive Web