【HAOI2008】【BZOJ1041】圆上的整点
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】圆上的整点相关推荐
- 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 ...
- bzoj 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1238 [Submit][S ...
- BZOJ1041:[HAOI2008]圆上的整点(数论)
Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Samp ...
- bzoj1041 [HAOI2008]圆上的整点 gcd
这个题非常恶心,因为条件很少,要求也很少,看起来没有任何特殊的性质 所以只能往约数.gcd上靠 然后就是 x^2=r^2-y^2=(r-y)(r+y) 设A=r-y, B=r+y 由于A*B是完全平方 ...
- 【codevs1867】【Tyvj3508】【BZOJ1041】圆上的整点,数学乱搞
传送门1 传送门2 传送门3 写在前面:乱搞数学-- 思路: 原博文 有了上面的推理,那么实现的方法为: 枚举d∈[1,sqrt(2R)],然后根据上述推理可知:必先判d是否为2R的一约数. 此时d为 ...
- [BZOJ 1041] 圆上的整点
Description 求一个给定的圆( x2+y2=r2 x 2 + y 2 = r 2 x^2+y^2=r^2),在圆周上有多少个点的坐标是整数 Input 只有一个正整数 n n n,n≤200 ...
- BZOJ 1041 圆上的整点 数学
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1041 题目大意: 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是 ...
- 2019 ICPC 上海站网络赛 K.Peekaboo (圆上整点)
https://nanti.jisuanke.com/t/41421 题意:给定平面上两个点到原点之间的距离aaa和bbb以及这两点之间的距离ccc,且这两点的坐标均是整数,求该两点可能的坐标,按字典 ...
- 【BZOJ】【1041】【HAOI2008】圆周上的点
数学 orz hzwer 完全不会做-- 很纠结啊,如果将来再遇到这种题,还是很难下手啊-- 引用题解: [分析]: 样例图示: 首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否 ...
最新文章
- HDOJ(HDU) 1977 Consecutive sum II(推导、、)
- nginx配置文件防盗链
- leetcode面试题 08.03. 魔术索引(二分)
- 推导基姆拉尔森公式根据日期计算星期
- Qt实践录:串口调试助手
- brctl 设置ip_docker配置独立桥接IP的方法
- 自定义类加载器与热部署
- 思维导图软件哪个好?盘点10款好用的思维导图软件
- 飞鹅云打印机api接口asp版,asp源码对接飞鹅云小票打印机
- odroid-xu4(ubuntu mate 16.04)源码编译opencv 3.2
- 用Unity做游戏,你需要深入了解一下IL2CPP
- 计算机与网络之间是红叉,雨林木风win7系统网络连接出现红叉无法上网的解决办法...
- GitHub在Markdown上乱哄哄 - 将666更改为DCLXVI
- 详解PHP设置定时任务的实现方法
- 需求评审会如何做才不会沦为形式主义
- 将图片做成gif动态图
- 腾讯公司移动互联网的运营与营销
- java fresh 水果,《蓝莓甜杏面包/ Fresh Apricot and Blueberry Tea Bread》把水果做进面包里...
- “中关村黑马程序员训练营”练习题(二)
- IP 反查地址开源项目 ip2region