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 = (R+Y)(R-Y)

令  d=gcd(R+Y,R-Y),A=(R+Y)/d,B=(R-Y)/d

则 gcd(A,B)=1,且A != B

X^2= d^2 *A * B

所以 A * B 为 完全平方数

又因为 gcd(A,B)=1 ,A!=B,所以 A,B 都是 完全平方数

令 a= 根号A,b=根号B

a^2 + b ^2 = 2*R / d

所以 d 必须是 2*R 的 约数

根号(2*R) 枚举 约数 d

1、a^2 + b^2 = 2*R / d

2、a^2 + b^2 = d

对于 每一种 情况 分别 根号复杂度 枚举 a,计算b

判断相应的 A ,B 是否满足  gcd=1 且 A!=B

满足则 ans+1

这只算出了第一象限的情况

根据园的对称性,ans*4 可得 所有 象限内的点

最后在加上4个在 坐标轴上的点即可

#include<cmath>
#include<cstdio> using namespace std; typedef long long LL; LL R; int ans=; int gcd(int A,int B) { return !B ? A : gcd(B,A%B); } void solve(int t,int d)
{
int n=sqrt(t*1.0);
int A,B,b;
for(LL a=;a<=n;++a)
{
B=t-a*a; b=sqrt(B);
if(b*b!=B || !B) continue;
A=a*a;
if(gcd(A,B)== && A!=B) ans++;
}
} int main()
{
scanf("%lld",&R);
int n=sqrt(R*2.0);
for(int d=;d<=n;++d)
{
if(R*%d==)
{
solve(*R/d,d);
if(d*d!=n) solve(d,*R/d);
}
}
ans/=;
ans=ans*+;
printf("%d",ans);
}

1041: [HAOI2008]圆上的整点

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 4640  Solved: 2092
[Submit][Status][Discuss]

Description

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

Input

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

Output

整点个数

Sample Input

4

Sample Output

4

bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点的更多相关文章

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

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

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

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

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

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

  4. BZOJ1041 HAOI2008圆上的整点(数论)

    求x2+y2=r2的整数解个数,显然要化化式子.考虑求正整数解. y2=r2-x2→y2=(r-x)(r+x)→(r-x)(r+x)为完全平方数→(r-x)(r+x)/d2为完全平方数,d=gcd(r ...

  5. [bzoj1041][HAOI2008]圆上的整点

    我能想得出怎么做才奇怪好吗 题解:http://blog.csdn.net/csyzcyj/article/details/10044629 #include<iostream> #inc ...

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

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

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

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

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

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

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

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

随机推荐

  1. keil51下使用sprintf问题

    测试环境:keil c51 + STC89C52说明: 1.keil的不定参数只有15个字节也就是说sizeof(...) 加起来总共不能超过15字节,否则会出错 2.当不定参数中有常数时,你也会得不 ...

  2. 怎样利用好单片机上的存储器资源来实现OD的存储与访问

    转自:http://www.cnblogs.com/winshton/p/4897789.html 我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的 ...

  3. C++操作mysql方法总结(3)

    C++通过mysql++操作mysql的方式   使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍   Mysql ...

  4. 函数调用时形参的传递也会被认为是赋值操作(继承自Object后会出现的问题)

    http://blog.csdn.net/houqd2012/article/details/25070987

  5. vue 引入组件

    <comA></comA>此时可用在模板里 //a为vue文件,里面定义了模板import comA from './components/a' export default ...

  6. Mysql 5.7 报错 3534 错误

    需要先 执行 mysqld  --initialize 然后  mysqld --install 最后  net start mysql 即可启动服务 如果不执行第一步 则会报错

  7. app流畅度测试--使用手机自带功能

    1.进入开发者选项,在“监控”选项卡找到“GPU呈现模式分析”的选项 2.开启后,即可以条形图和线形图的方式显示系统的界面相应速度 3.那么要如何根据曲线判断系统是否流畅呢?实际上这个曲线表达的是GP ...

  8. nowcoder 202F-平衡二叉树

    题目链接 题目描述 平衡二叉树,顾名思义就是一棵“平衡”的二叉树.在这道题中,“平衡”的定义为,对于树中任意一个节点,都满足左右子树的高度差不超过 d. 空树的高度定义为0,单个节点的高度为1,其他情 ...

  9. 对final和static的理解

    一.final (一).final的使用 final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量) 1. 当用final修饰一个类时,表明这个类不能被继承.2. 当用final修饰一个方法 ...

  10. D-Separation(D分离)-PRML-8.22-Graphical Model 五 18 by 小军

    D-Separation(D分离)-PRML-8.22-Graphical Model 五18by 小军   一.引言 在贝叶斯网络的学习过程中,经常会遇到(D-Separation)D-分离这个概念 ...