[ HAOI 2008 ] 圆上的整点
\(\\\)
Description
给出一个整数 \(r\) ,求圆 \(x^2+y^2=r^2\) 上的整点数。
- \(r\le 2\times 10^9\)
\(\\\)
Solution
神题。
可以注意到,坐标轴上共有四个整点,其余位置各个象限里整点数相同,所以我们只需要计算第一象限的答案。
首先有方程
\]
移项,得
\]
设 \(d=gcd(r+y,r-y)\),有
\]
因为 \(x^2,d^2\) 均为完全平方数,所以 \(\frac{r+y}{d}\times \frac{r-y}{d}\) 是完全平方数。
根据 \(d\) 的定义,显然有 \((\frac{r+y}{d},\frac{r-y}{d})=1\)。
然而显然存在的是,两个不同的质数之积,或一个质数的平方和另一个质数的积都不是完全平方数。
所以 \(\frac{r+y}{d}, \frac{r-y}{d}\) 都是完全平方数。
我们设 \(a,b\) 分别满足:
\]
那么有
\]
解法出来了。
首先 \(\sqrt {2r}\) 枚举 \(2r\) 的因数,显然 \(d\) 不同的方案得到的点一定不同。
然后对于枚举的每一个 \(d\) ,枚举每一个可能的 \(a\) ,检验对应的 \(b\) 是否为整数,且满足互质即可。
注意交换 \(a,b\) 是一种情况,所以我们枚举 \(a\) 的范围在 \([1,\sqrt{\frac{2r}{d\times 2}}\ ]\) 里。
复杂度分析:
枚举约数 \(\sqrt{2r}\) ,对于每一个 \(d\) 再 \(\sqrt d\) 的枚举约数,验证用到 \(gcd\) 复杂度 \(log\) 。
总复杂度大概是 \((2r)^{\frac 34}log(2r)\) 级别的。
\(\\\)
Code
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define R register
using namespace std;
typedef long long ll;
ll n,ans;
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
int main(){
scanf("%lld",&n);
n<<=1;
ll lim=sqrt(n);
for(R ll d=1,lim1;d<=lim;++d)
if(n%d==0){
lim1=sqrt((n/d)/2);
for(R ll a=1,b;a<=lim1;++a){
b=sqrt((n/d)-a*a);
if(a==b) continue;
if(b*b!=(n/d)-a*a) continue;
if(gcd(a*a,b*b)!=1) continue;
++ans;
}
if(n/d!=d){
ll d1=n/d;
lim1=sqrt(d/2);
for(R ll a=1,b;a<=lim1;++a){
b=sqrt((n/d1)-a*a);
if(a==b) continue;
if(b*b!=(n/d1)-a*a) continue;
if(gcd(a*a,b*b)!=1) continue;
++ans;
}
}
}
printf("%lld\n",ans*4+4);
return 0;
}
[ HAOI 2008 ] 圆上的整点的更多相关文章
- BZOJ 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3621 Solved: 1605[Submit][Sta ...
- bzoj 1041: [HAOI2008]圆上的整点 数学
1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 853[Submit][Stat ...
- 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4298 Solved: 1944[Submit][Sta ...
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4210 Solved: 1908[Submit][Sta ...
- 【BZOJ1041】[HAOI2008]圆上的整点
[BZOJ1041][HAOI2008]圆上的整点 题面 bzoj 洛谷 题解 不妨设\(x>0,y>0\) \[ x^2+y^2=r^2\\ y^2=(x+r)(x-r) \] 设\(r ...
- 【BZOJ1041】圆上的整点(数论)
[BZOJ1041]圆上的整点(数论) 题面 BZOJ 洛谷 题解 好神仙的题目啊. 安利一个视频,大概是第\(7\)到\(19\)分钟的样子 因为要质因数分解,所以复习了一下\(Pollard\_r ...
- 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 ...
- BZOJ1041 [HAOI2008]圆上的整点 【数学】
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4631 Solved: 2087 [Submit][S ...
随机推荐
- JSP操作
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/actions.html: JSP操作(Action)使用XML语法结构来控制Servlet引擎的行为.可 ...
- python: filter, map, reduce, lambda
filter built-in function filter(f,sequence) filter can apply the function f to each element of seque ...
- Linux命令输出头(标题)、输出结果排序技巧
原文:http://blog.csdn.net/hongweigg/article/details/65446007 ----------------------------------------- ...
- struts1与struts2的差别
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结 ...
- redux 简明学习
核心概念 redux专注于状态管理,把所有的状态都存在一个对象中.核心概念包括:store.state.action.reducer [store] store是保存数据的地方,redux提供crea ...
- 在mac上安装gradle(超详细,直接按步骤操作即可轻松搞定)
第一步, 就是先download最新版本的gradle,网址如下: http://gradle.org/gradle-download/ 然后将下载下来的zip包放解压到本地任意的路径上, 例如,我本 ...
- 关于Flask的默认session
Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了. 过期时间是通过cookie的过期时间实现的 ...
- ModuleNotFoundError: No module named 'urlparse'
这是2.x转3.x问题 2.x写法: from urlparse import urlparse 3.x写法: from urllib.parse import urlparse 问题解决.
- oracle10G 数据库名、实例名、ORACLE_SID 及创建数据库- hl3292转载修改(实践部分待校验)
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- 05_锅炉压力案例_java实现
最开始是有机顶盒,后来电视里面都带着一个安卓的设备.现在空调.冰箱.洗衣机都跃跃欲试地想把这个东西加上.海尔出了一款智能冰箱,就是在冰箱门上嵌了一个12寸的屏幕.这个屏幕实际上就是一个安卓的平板似的. ...