bzoj 1041 数论
来源:互联网 发布:python截取指定字符串 编辑:程序博客网 时间:2024/06/06 16:30
题意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。
这居然不是几何题(╯‵□′)╯︵┻━┻
这居然是道数轮题(╯-_-)╯╧╧
我们只考虑x>0 且 y>0 即在第一象限的情况,然后最终=第一象限答案*4 + 4(坐标轴上的四个点)
x^2+y^2=r^2
即 y^2 = r^2-x^2 = (r+x)(r-x)
令d=gcd(r+x,r-x)
所以 r+x=d*U ,r-x=d*V 且 gcd(U,V)=1
所以 y^2 = d^2 +U*V
因为y^2 和 d^2 都是完全平方数
又因为x>0 即 U<>V
所以U和V也都是完全平方数
令U=u*u,V=v*v (u>v>0 且 gcd(u,v)=1)
则有 2*r=(r+x) + (r-x) = d*(u*u+v*v) ; x=[(r+x)-(r-x)] / 2 = d(u*u-v*v)/2 ; y = d*u*v
所以我们枚举2*r的因数d,再枚举u,并计算出 v=sqrt(2*r/d - u*u) ,然后判断u和v是否满足条件 (用U和V判断也可以)
即 u>v>0 且 gcd(u,v)=1 且 u*u+v*v=2*r/d (U和V必须是完全平方数)
var r,ans,d,u,v :int64; i :longint;function gcd(a,b:int64):int64;begin if b=0 then exit(a) else exit(gcd(b,a mod b));end;procedure work(t:int64);var j:longint;begin for j:=1 to trunc(sqrt(t)) do begin u:=int64(j); v:=trunc(sqrt(t-u*u)); if u>v then begin if (gcd(u,v)=1) and (u*u+v*v=t) and (v<>0) then inc(ans); end; end;end;begin read(r); r:=r<<1; ans:=1; for i:=1 to trunc(sqrt(r)) do begin d:=int64(i); if (r mod d=0) then begin work(r div d); if d*d<>r then work(d); end; end; ans:=ans<<2; writeln(ans);end.——by Eirlys
0 0
- bzoj 1041 数论
- BZOJ 3944 Sum 数论
- BZOJ 2671 Calc 数论
- BZOJ 4173 数学 数论
- BZOJ 1406 - 伪数论
- 【BZOJ 4173】 数学 数论
- BZOJ 1008 越狱 【数论】
- BZOJ 糖果传递-(数论)
- BZOJ-3209 (数论)
- BZOJ-2186 (数论)
- BZOJ 1041 HAOI2008 圆上的整点 数论
- BZOJ 1041: [HAOI2008]圆上的整点 数论
- BZOJ 2219 数论之神 数论
- bzoj 2219: 数论之神 数论
- BZOJ 1420&&BZOJ 1319 Discrete Roots 数论
- 【BZOJ】【P2818】【Gcd】【数论】【题解】
- BZOJ 3858 Number Transformation 数论
- BZOJ 1408 NOI2002 Robot 数论
- 【linux学习】创建虚拟机并搭建集群(2)
- x86主机搭建家庭智能路由系统 ---- 设计篇
- 声明Spring Bean和注入Bean的几种常用注解和区别
- 300. Longest Increasing Subsequence
- Ubnutu16.04 安装有道词典
- bzoj 1041 数论
- MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
- CF 489D Unbearable Controversy of Being BFS
- NSString 转NSDate 之昨天、今天、明天
- 如何给table设置行边框
- 一位资深程序员大牛给予Java初学者的学习建议
- 软件测试流程
- Got fatal error 1236
- 隐式按钮点击库例子