[ 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 ...
随机推荐
- spring面试相关点
刚刚开通博客,因为最近在进行各种面试,遇到各种面试问题,用这个机会整理几篇文章方便日后需要 springmvc 和springboot spring boot只是一个配置工具,整合工具,辅助工具. s ...
- easyUi 学习笔记 (二 ) 使用tabs 里datagridview 发送ajax请求 不访问后台的问题
这个BUG 我花了一个半小时, 还是看不出哪里的问题, 于是就百度到这么一段话,我需要记住 <================================================= ...
- 洛谷 P4136 谁能赢呢?
P4136 谁能赢呢? 题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移 ...
- Servlet的过滤器(Filter)
以下内容引用自http://wiki.jikexueyuan.com/project/servlet/writing-filters.html: Servlet过滤器是Java类,可用于Servlet ...
- Mybatis 最强大的动态sql <where>标签
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHER ...
- 关于C/S架构系统的安全监测
由于工作需求,需要对一大批C/S架构的系统进行测试,所以这几天一直在摸索怎么个套路法,踩过的坑就不发了,直接奔我个人的套路: C/S架构的系统,说最直白一点就是一堆.exe的系统,他们大部分没有web ...
- JS获取地址栏并拼接參数
比方地址栏是这种:http://www.aa.com/detail.aspx?code=1&start=2014-12-01&end=2014-12-23&name=abc 要 ...
- 第一天,Robert和Sue大师培训给的启示
程序猿的零点从他睡觉那一刻开始计时. 今天是周六,听到了Robert关于销售技巧的培训还有Sue关于微信零售业O2O电商的分析,一并加上昨天晚上直到11点的Leadership培训,这个周末真的是收获 ...
- 自己定义ViewGroup控件(一)----->流式布局进阶(一)
main.xml <? xml version="1.0" encoding="utf-8"?> <com.example.SimpleLay ...
- Hibernate- Criteria 简易
package cn.demo; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; ...