题目的所求可以转化为:

\(y^2=r^2-x^2\)(其中r,x,y均为整数)

即\(y^2=(r-x)(r+x)\)(其中\(r,x,y\)均为整数)

不妨设\((r-x)=d*u\)-------① \((r+x)=d*v\)-------②(其中\(gcd(u,v)=1\))

则有\(y^2=d^2*u*v\),因为\(u,v\)互质所以\(u,v\)一定是完全平方数,所以再设\(u=s^2,v=t^2\)

则有\(y^2=d^2*s^2*v^2\),即\(y=d*s*v\)

②-①得\(x=\frac{ t^2-s^2 }{2}*d\)

②+①得\(2*r=(t^2+s^2)*d\)

然后枚举\(2*r\)的约数\(d\),枚举算出\(s\),算出对应\(t\),若\(gcd(t,s)=1\)且\(s,t\)为整数,带入求出\(x,y\),若符合题意答案就加二(\(x,y\)满足交换律)

最后的答案为\((ans+1)*4\),(\(+1\)是因为坐标轴上有一点,\(*4\)是因为4个象限)

注意:小心乘法运算时爆longlong

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
il int read()
{
re int x=0,f=1;re char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return x*f;
}
il int gcd(int a,int b)
{
if(!b) return a;
return gcd(b,a%b);
}
int r,ans;
il void work(int d)
{
for(re int s=1;s*s<=r/d;++s)
{
int t=sqrt(r/d-s*s);
if(gcd(s,t)==1&&s*s+t*t==r/d)
{
int x=(s*s-t*t)/2*d;
int y=d*s*t;
if(x>0&&y>0&&x*x+y*y==(r/2)*(r/2)) ans+=2;
}
}
}
signed main()
{
r=read()*2;
for(re int i=1;i*i<=r;++i)
{
if(r%i==0)
{
work(i);
if(i*i!=r) work(r/i);
}
}
printf("%lld",(1+ans)*4);
return 0;
}

[HAOI2008]圆上的整点(数论)的更多相关文章

  1. 【bzoj1041】[HAOI2008]圆上的整点 数论

    题目描述 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. 输入 只有一个正整数n,n<=2000 000 000 输出 整点个数 样例输入 4 样例输出 4 题解 数 ...

  2. BZOJ1041:[HAOI2008]圆上的整点(数论)

    Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Samp ...

  3. 2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ π )

    2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ \(\pi\) ) https://www.luogu.com.cn/problem/P2508 题意: 求一个给定的圆 \( ...

  4. BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4210  Solved: 1908[Submit][Sta ...

  5. BZOJ 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3621  Solved: 1605[Submit][Sta ...

  6. bzoj 1041: [HAOI2008]圆上的整点 数学

    1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  7. bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 853[Submit][Stat ...

  8. 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4298  Solved: 1944[Submit][Sta ...

  9. 【BZOJ1041】[HAOI2008]圆上的整点

    [BZOJ1041][HAOI2008]圆上的整点 题面 bzoj 洛谷 题解 不妨设\(x>0,y>0\) \[ x^2+y^2=r^2\\ y^2=(x+r)(x-r) \] 设\(r ...

  10. 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 ...

随机推荐

  1. symfony框架

    Symfony是一个完整的框架结构,设计用来帮助并加速网络应用的开发. 1)安装 symfony的安装还是比较简单的,而且提供了多种安装的方式,详情可以看官网手册 问题: cURL error 60: ...

  2. 微信开发 提示 Redirect_uri(错误10003)

    情景: 搭建完成一个网站,使用微信打开链接地址,结果报错1003 完整的错误信息: 出现这种情况一般有两种原因: 1.没有配置网页授权  我们可以根据微信的开发者文档http://mp.weixin. ...

  3. 什么是arp协议?

    转自:https://blog.csdn.net/tigerjibo/article/details/7351992 ARP (Address Resolution Protocol) 是个地址解析协 ...

  4. Java 线程的生命周期

    当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死 ...

  5. jenkins插件findbugs+pmd+checkstyle结合sonar与maven(java环境代码质量和代码规范管理)

    一.下载jdk并安装(最好jdk官网下载解压安装的) 二.下载maven并安装maven 三.安装jenkins及插件 安装checkstyle.pmd.findbugs.maven.sonar等相关 ...

  6. HTML5 & tel & make a phone call

    HTML5 & tel & make a phone call 咋呼叫呀,网页怎么打电话? { key: "exploreCorpPhone", title: &q ...

  7. 集合之LinkedList(含JDK1.8源码分析)

    一.前言 LinkedList是基于链表实现的,所以先讲解一下什么是链表.链表原先是C/C++的概念,是一种线性的存储结构,意思是将要存储的数据存在一个存储单元里面,这个存储单元里面除了存放有待存储的 ...

  8. DotNetty 实现 Modbus TCP 系列 (一) 报文类

    本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 Modbus TCP/IP 报文 报文最大长度为 260 byte (ADU = 7 byte MBAP Header ...

  9. codeforces611C

    New Year and Domino CodeForces - 611C 他们说:“每一年都像多米诺骨牌,一个接一个地倒下去”.但是,一年能够像多米诺骨牌那样放在网格中吗?我不这么认为. Zydsg ...

  10. Nginx stream如何获取ssl信息并反向代理至上游服务器

    L:116