Description###

求一个给定的圆(x2+y2=r^2),在圆周上有多少个点的坐标是整数。

Input###

只有一个正整数n,n<=2000 000 000

Output###

整点个数

Sample Input###

4

Sample Output###

4


想法##

嗯哼,一道数学题。

开始推柿子。

首先我们只需求出满足 $ x^2 + y^2 = z^2 $ 的正整数对数即可,乘以4后再加4便为答案

\[x^2+y^2=z^2 \\
y^2=z^2-x^2=(z+x)(z-x) \\
设\quad d=gcd(z+x,z-x) \\
那么 \quad y^2=d^2 \frac{z+x}{d} \frac{z-x}{d} \\
这里面 \frac{z+x}{d} 与 \frac{z-x}{d} 互质,所以 \frac{z+x}{d} 和 \frac{z-x}{d} 都为完全平方数 \\
设 \frac{z+x}{d}为A, \frac{z-x}{d}为B \\
设A=a^2,B=b^2 \\
a^2+b^2=\frac{2z}{d} \\
故,我们可以枚举2z的每一个约数d,然后再枚举每一对满足a^2+b^2=\frac{2z}{d}的a和b \\
得到a,b后要带回去算出A,B,判断是否gcd(A,B)=1且A \neq B
\]


代码##

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath> using namespace std; typedef long long ll; ll n,m,ans=0;
ll gcd(ll a,ll b) { return b ? gcd(b,a%b) : a; } int main()
{
scanf("%d",&n);
m=sqrt(n*2);
for(ll d=1;d<=m;d++){
if((n*2)%d) continue;
for(ll a=1;a*a*2<=d;a++){
ll b=sqrt(d-a*a);
if(b*b!=d-a*a) continue;
ll A=a*a,B=b*b;
if(gcd(A,B)!=1 || A==0 || B==0 || A==B) continue;
ans+=4;
}
for(ll a=1;a*a*2<=n*2/d;a++){
ll b=sqrt(n*2/d-a*a);
if(b*b!=n*2/d-a*a) continue;
ll A=a*a,B=b*b;
if(gcd(A,B)!=1 || A==0 || B==0 || A==B) continue;
ans+=4;
}
}
printf("%lld\n",ans+4); return 0;
}

[bzoj1041] [洛谷P2508] [HAOI2008] 圆上的整点的更多相关文章

  1. 洛谷P2508 [HAOI2008]圆上的整点

    题目描述 求一个给定的圆$ (x^2+y^2=r^2) $,在圆周上有多少个点的坐标是整数. 输入格式 \(r\) 输出格式 整点个数 输入输出样例 输入 4 输出 4 说明/提示 \(n\le 20 ...

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

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

  3. P2508 [HAOI2008]圆上的整点

    题目描述 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. 输入输出格式 输入格式: r 输出格式: 整点个数 输入输出样例 输入样例#1: 复制 4 输出样例#1: 复制 ...

  4. luogu P2508 [HAOI2008]圆上的整点

    传送门 推荐去bzoj看个视频了解一下 不要妄想视频直接告诉你题解 但是视频告诉了你后面要用的东西 首先我们要求的是\(x^2+y^2=n^2(x,y\in Z)\)的\((x,y)\)对数,可以转化 ...

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

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

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

  7. BZOJ1041 [HAOI2008]圆上的整点 【数学】

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4631  Solved: 2087 [Submit][S ...

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

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

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

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

随机推荐

  1. <% %>、<%! %>和<%= %>

    <%  %> 此标签内的内容在jsp编译的时候,将被编译成servlet的_jspService()方法.这个方法用作服务器端向客户端输出.因此这对标签里边不能在定义方法了,因为在Java ...

  2. C#获取美团评价信息

    闲来无事,朋友需要一家美团店铺的评价消息,索性做个小工具. 一:第一步找到目标网站 地址:https://www.meituan.com/meishi/4460141/ 二:分析网页请求 在目标网页, ...

  3. 利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。

    正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的‘好’东西记 ...

  4. HTTPS RAS

    这篇文章讲的清楚 https://zhuanlan.zhihu.com/p/75461564

  5. python函数不定长参数

    def fun(a, b, *args): print(a) print(b) print(args) print("="*30) ret = a + b for i in arg ...

  6. eclipse中如何配置jdk

    1.在eclipse的上方打开Windows这个选项,选择Preferences==>Java==>Installed JREs 2.然后选择Add==>Standard VM==& ...

  7. [梁山好汉说IT] 区块链在梁山的应用

    [梁山好汉说IT] 区块链在梁山的应用 0x00 摘要 区块链属于一种去中心分布式数据存储系统,有其擅长的应用场景,也有其缺点. 下面用梁山为例来阐释下区块链部分概念&应用. 0x01 梁山好 ...

  8. redis 的持久化方式

    redis 持久化的两种方式 RDB:RDB 持久化机制,是对 redis 中的数据执行周期性的持久化. AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件 ...

  9. 戴尔服务器R710做raid5+1

    环境条件 戴尔服务器R710,有四块硬盘 实现目标:四块硬盘其中三块做raid5,剩余一块做热备硬盘 一.启动服务器 二.进入配置raid界面 根据提示按Crtl+R 进入raid配置界面 三.界面介 ...

  10. Linux中 ps命令的参数讲解

    Linux命令ps: (Process Status的缩写)该命令常常用来用来列出系统中当前运行的进程.ps是显示瞬间进程的状态,并不动态连续:如果想对进程进行实时监控应该用top命令 -a 显示所有 ...