[bzoj1041] [洛谷P2508] [HAOI2008] 圆上的整点
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便为答案
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] 圆上的整点的更多相关文章
- 洛谷P2508 [HAOI2008]圆上的整点
题目描述 求一个给定的圆$ (x^2+y^2=r^2) $,在圆周上有多少个点的坐标是整数. 输入格式 \(r\) 输出格式 整点个数 输入输出样例 输入 4 输出 4 说明/提示 \(n\le 20 ...
- 2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ π )
2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ \(\pi\) ) https://www.luogu.com.cn/problem/P2508 题意: 求一个给定的圆 \( ...
- P2508 [HAOI2008]圆上的整点
题目描述 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. 输入输出格式 输入格式: r 输出格式: 整点个数 输入输出样例 输入样例#1: 复制 4 输出样例#1: 复制 ...
- luogu P2508 [HAOI2008]圆上的整点
传送门 推荐去bzoj看个视频了解一下 不要妄想视频直接告诉你题解 但是视频告诉了你后面要用的东西 首先我们要求的是\(x^2+y^2=n^2(x,y\in Z)\)的\((x,y)\)对数,可以转化 ...
- 【BZOJ1041】[HAOI2008]圆上的整点
[BZOJ1041][HAOI2008]圆上的整点 题面 bzoj 洛谷 题解 不妨设\(x>0,y>0\) \[ x^2+y^2=r^2\\ y^2=(x+r)(x-r) \] 设\(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 ...
- 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/ ...
随机推荐
- js 的this指向问题
this指向的,永远只可能是对象! this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用. this指向的对象,我们称之为函数的上下文context,也叫函数的调用者. 1:通过函数名直 ...
- 一种HTML table合并单元格的思路
/** * 合并单元格 * @param table1 表格的ID * @param startRow 起始行 * @param col 合并的列号,对第几列进行合并(从0开始).如果传下来为0就是从 ...
- npm安装cnpm
获取npm缓存路径: npm config get cache 离线安装 npm install --cache ./npm-cache --optional --cache-min 99999999 ...
- 【萌新向】cartographer_ros最新安装指南 2019-12
首先说明,这篇文章于2019年12月写下,cartographer现在还在不断更新,也许这篇文档内容会失效,但是大体是一样的安装流程. 一.硬件条件 使用平台 x86_64平台 ROS发行版 Indi ...
- sleep()与wait()区别
1.所在类不一样:sleep在Thread类里面,wait在Object里面. 2.sleep需要抓异常,wait则不用. 3.sleep没有释放锁,wait释放锁. 4.sleep设置了释放时间,w ...
- HTTP 安全头配置
在本篇中,我将介绍常用的安全头信息设置,并对每个响应头设置给出一个示例. HTTP安全头说明 Content-Security-Policy 内容安全策略(CSP)常用来通过指定允许加载哪些资源来防止 ...
- spring系列框架篇-承接各类型中小型项目-期待与您的长期合作!
框架选型: 1.基本框架:springboot2.2+springcloud(Hoxton.M2)+nacos (所有公共模块全部使用 starter 方式依赖) 2.授权及权限:oauth2+jwt ...
- Python for Data Analysis 学习心得(二) - pandas介绍
一.pandas介绍 本篇程序上篇内容,在numpy下面继续介绍pandas,本书的作者是pandas的作者之一.pandas是非常好用的数据预处理工具,pandas下面有两个数据结构,分别为Seri ...
- js原生深拷贝
/*****************************************************************************************/ 原生js实现深拷 ...
- JDK12 的下载和没有jre的解决及环境配置
一.下载直接在官网上下载并点击安装即可,步骤省.jdk12下载中途已经没有跳出窗口下载jre的过程了,需要手动生成jre. 二.没有jre的解决:1.cmd 2.切换到jdk的安装目录,执行命令:bi ...