bzoj 1041 数学推理
原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1041
我们只需要求第一象限内(不包括坐标轴)的点数然后ans=ans*4+4就好了
首先我们知道圆上点的方程关系
x*x+y*y=r*r
那么我们变下型
Y*Y=R*R-X*X
Y*Y=(R-X)*(R+X) ①
我们令d=gcd(r-x,r+x)
设A=(r-x)/d;
B=(r+x)/d;
因为我们要求x为整数,那么需要A,B为整数
将A,B带回①可得
A*B*d*d=y*y
因为我们要求y为整数,那么需要A*B*d*d为完全平方数
因为点在第一象限内,所以A<>B,所以A,B应为完全平方数
那么当A,B为完全平方数时,x,y为整数
那么我们可以设A=a*a; B=b*b;
则有a*a=(r-x)/d; b*b=(r+x)/d;
那么两式相加,得到a*a+b*b=2*r/d;
那么只要a,b为整数,就可以得到一组整点
那么我们可以知道d|2*r
所以我们可以枚举2*r的因数,对于每个因数(每个因数对应一对儿因数,分别是d和2*r/d)
假设因数是d的时候,因为a<b所以2*a*a<2*r/d, 所以a*a<r/d 那么我们可以枚举a<sqrt(r/d),
对于每个a我们可以算出b,相对应的A,B应满足gcd(A,B)=1且A<>B如果满足,就累加答案
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
r :int64;
ans :int64; function gcd(a,b:int64):int64;
begin
if b>a then exit(gcd(b,a)) else
if b= then gcd:=a else gcd:=gcd(b,a mod b);
end; function check(y:int64;x:extended):boolean;
var
x1 :int64;
begin
if x=trunc(x) then
begin
x1:=trunc(x);
if (gcd(x1*x1,y*y)=) and (x1*x1<>y*y) then
begin
exit(true);
end;
end;
exit(false);
end; procedure main;
var
d, a :longint;
b :extended;
begin
read(r);
for d:= to trunc(sqrt(*r)) do
begin
if (*r) mod d= then
begin
for a:= to trunc(sqrt(r/d)) do
begin
b:=sqrt(((*r)/d)-a*a);
if check(a,b) then ans:=ans+;
end;
if d<>((*r) div d) then
for a:= to trunc(sqrt(d/)) do
begin
b:=sqrt(d-a*a);
if check(a,b) then ans:=ans+;
end;
end;
end;
writeln(ans*+);
end; begin
main; end.
bzoj 1041 数学推理的更多相关文章
- BZOJ 1041 数学
思路: $x^2+y^2=r^2$$y=\sqrt{(r+x)(r-x)}$令$ d=gcd(r+x,r-x)$设A=$(r-x)/d$ $B=(r+x)/d$则$gcd(A,B)=1$$y^2=d^ ...
- bzoj 5334 数学计算
bzoj 5334 数学计算 开始想直接模拟过程做,但模数 \(M\) 不一定为质数,若没有逆元就 \(fAKe\) 掉了. 注意到操作 \(2\) 是删除对应的操作 \(1\) ,相当于只有 \(1 ...
- bzoj 1041: [HAOI2008]圆上的整点 数学
1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- BZOJ 1041 [HAOI2008]圆上的整点:数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...
- BZOJ 1041 圆上的整点 数学
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1041 题目大意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整 ...
- BZOJ 1041 [HAOI2008]圆上的整点:数学【费马平方和定理】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4210 Solved: 1908[Submit][Sta ...
- BZOJ 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3621 Solved: 1605[Submit][Sta ...
- bzoj 1041 圆上的整点 分类: Brush Mode 2014-11-11 20:15 80人阅读 评论(0) 收藏
这里先只考虑x,y都大于0的情况 如果x^2+y^2=r^2,则(r-x)(r+x)=y*y 令d=gcd(r-x,r+x),r-x=d*u^2,r+x=d*v^2,显然有gcd(u,v)=1且u&l ...
随机推荐
- 通过repcached实现memcached主从复制
一.环境 服务器A:ubuntu server 12.04(192.168.1.111) 服务器B:ubuntu server 12.04 (47.50.13.111) 二.memcached安装 s ...
- C++学习009预处理器指令符号 # ## #@ 符号的使用
# ## #@ 符号是预处理器指令符号. 当预处理器遇到#指令符号时,会将#之后的部分用双引号括起来 当预处理去遇到##指令符号时,直接将##前后部分连接起来 当预处理器遇到#@指令符号,将#@之后的 ...
- Struts2(五.用户注册的实现及整合Action的配置方法)
一.用户注册功能 register.jsp页面 若是jquery ajax方式提交给action,还要回到jquery,控制权在jquery若是表单方式提交给action,控制权交给action &l ...
- 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6
孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...
- EM算法浅析(一)-问题引出
EM算法浅析,我准备写一个系列的文章: EM算法浅析(一)-问题引出 EM算法浅析(二)-算法初探 一.基本认识 EM(Expectation Maximization Algorithm)算法即期望 ...
- pip消失后复原
pip是python中比较常用的管理依赖包的工具.今天心血来潮更新一下pip版本,结果悲剧发生了. -bash: /Library/Frameworks/Python.framework/Versio ...
- [比赛总结]ACM div3 G 比赛总结
这次题目总体感觉和做阅读理解差不多,英文题目读起来相当费劲. 另外,这次比赛整个队伍中我们三个都突出存在的问题就是,把简单问题复杂化,抓不到事物的本质,因此很容易的就被题目误导. 比如C题,明明想到了 ...
- lubuntu 使用USB摄像头
http://liangbing8612.blog.51cto.com/2633208/598762 Most of the camera driver has integrated in the k ...
- XML中的DTD语法
DTD(Document Type Definition),全称为文档类型定义. 文件清单:book.xml <?xml version="1.0" ?> <!D ...
- LeetCode -- Linked List Circle ii
Question: Given a linked list, return the node where the cycle begins. If there is no cycle, return ...