BZOJ 1041 [HAOI2008]圆上的整点【几何】
2017-10-04 15:45
344 查看
1041: [HAOI2008]圆上的整点
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4499 Solved: 2023
[Submit][Status][Discuss]
Description
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。Input
只有一个正整数n,n<=2000 000 000Output
整点个数Sample Input
4Sample Output
4HINT
科普视频以下转自:http://hzwer.com/1457.html
【分析】:
样例图示:
首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否算出的值是否为整点,这样的枚举量为2*N,显然过不了全点。
然后想数学方法。
有了上面的推理,那么实现的方法为:
枚举d∈[1,sqrt(2R)],然后根据上述推理可知:必先判d是否为2R的一约数。
此时d为2R的约数有两种情况:d=d或d=2R/d。
第一种情况:d=2R/d。枚举a∈[1,sqrt(2R/2d)] <由2*a*a < 2*R/d转变来>,算出对应的b=sqrt(2R/d-a^2),检查是否此时的A,B满足:A≠B且A,B互质 <根据上面的推理可知必需满足此条件>,若是就将答案加1
第二种情况:d=d。枚举a∈[1,sqrt(d/2)] <由2*a*a < d转变来>,算出对应的b=sqrt(d-a^2),检查是否此时的A,B满足:A≠B且A,B互质 <根据上面的推理可知必需满足此条件>,若是就将答案加1
因为这样只算出了第一象限的情况<上面枚举时均是从1开始枚举>,根据圆的对称性,其他象限的整点数与第一象限中的整点数相同,最后,在象限轴上的4个整点未算,加上即可,那么最后答案为ans=4*第一象限整点数+4
【时间复杂度分析】:
枚举d:O(sqrt(2R)),然后两次枚举a:O(sqrt(d/2))+O(sqrt(R/d)),求最大公约数:O(logN)
#include<cstdio> #include<cmath> using namespace std; typedef long long ll; ll r,ans,d,a; ll gcd(ll x,ll y){return x%y?gcd(y,x%y):y;} bool check(ll y ,double x) { if(x==floor(x)){ ll x1=(ll)floor(x); if(gcd(x1*x1,y*y)==1&&x1*x1!=y*y)return 1; } return 0; } int main() { scanf("%lld",&r); for(d=1;d<=(ll)sqrt(r<<1LL);d++) if((r<<1LL)%d==0){ for(a=1;a<=(ll)sqrt((r<<1LL)/(d<<1LL));a++) if(check(a,sqrt(((2*r)/d)-a*a)))ans++; if(d!=(r<<1LL)/d) for(a=1;a<=(ll)sqrt(d>>1LL);a++)if(check(a,sqrt(d-a*a)))ans++; } printf("%lld",(ans+1)<<2LL); }
相关文章推荐
- 【BZOJ】1041: [HAOI2008]圆上的整点(几何)
- bzoj1041 [HAOI2008]圆上的整点
- 【BZOJ】1041: [HAOI2008]圆上的整点
- BZOJ 1041 HAOI 2008 圆上的整点 数学推导
- 【BZOJ1041】[HAOI2008]圆上的整点【数学】
- bzoj 1041: [HAOI2008]圆上的整点
- bzoj1041: [HAOI2008]圆上的整点
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
- bzoj 1041 [HAOI2008]圆上的整点
- 【bzoj1041】[HAOI2008]圆上的整点 数论
- [枚举] BZOJ1041: [HAOI2008]圆上的整点
- bzoj 1041: [HAOI2008]圆上的整点 数学
- bzoj1041: [HAOI2008]圆上的整点
- 【bzoj1041】[HAOI2008]圆上的整点
- BZOJ 1043 HAOI2008 下落的圆盘 计算几何
- 【HAOI2008】【BZOJ1041】圆上的整点
- BZOJ 1043: [HAOI2008]下落的圆盘 计算几何,贪心,线段交
- [bzoj1041][HAOI2008]圆上的整点
- 【BZOJ1043】[HAOI2008]下落的圆盘 几何
- BZOJ系列1041《[HAOI2008]圆上的整点》题解