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

这道题刚看时,就明白暴力不能解决一切。要是r^2<=20亿,还可以sqrt循环,这样的话只能用数学方法了。

(嘘!本数学方法的关键一步是借鉴来的)

x^2+y^2=r^2

x^2=r^2-y^2

x^2=(r+y)(r-y)

我们设gcd(r+y,r-y)=d                                                                           //不知道什么是GCD?就是最大公因数 

再设m=(r+y)/d,n=(r-y)/d,易得gcd(m,n)=1

因为m*n=x^2/d/d,即m*n是平方数。

又因为m和n互质,所以它们分别是平方数,我们还可以设m=u^2,n=v^2 。

带回去,r+y=d*u^2,r-y=d*v^2。

两式相加,2r=d(u^2+v^2)

加到这里,这些字母都表示整数。

现在我们的目标达成了:即把r^2降成了r。

我们可以枚举sqrt(2r),再依次判断是否有整数的u,v,且它们是否互质 。

最后还要注意以下:首先,所得结果要乘4 ,比如(3,4),还有(3,-4),(-3,4),(-3,-4)。

当然,如果x=0或y=0是一定可以的。最后还要加上4,即(0,r),(r,0),(0,-r),(-r,0)。(呵呵,r不等于0,O(∩_∩)O~~)

以下附代码:

#include<cstdio>
#include<cmath>
using namespace std;
const double jing=0.00000001;
long gcd(long a,long b){if (a%b==0) return b;return gcd(b,a%b);}
long long ans=0,r,temp;long i,j;double t;
int main()
{
  scanf("%lld",&r);r*=2;
  for (i=1;i<=trunc(sqrt(r));i++)
    if (r%i==0)
    {
      temp=r/i;
      for (j=1;j<=trunc(sqrt(temp));j++)
      {
        t=trunc(sqrt(temp-j*j));if (t<=j) break;
        if (t*t+j*j==temp){if (gcd(j,t)==1) ans++;}
      }
      if (r/i==i) continue;temp=i;
      for (j=1;j<=trunc(sqrt(temp));j++)
      {
        t=trunc(sqrt(temp-j*j));if (t<=j) break;
        if (t*t+j*j==temp){if (gcd(j,t)==1) ans++;}
      }
    }
  ans*=4;ans+=4;printf("%ld",ans);
  return 0;
}

bzoj1041题解的更多相关文章

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

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

  2. 【BZOJ1041】圆上的整点(数论)

    [BZOJ1041]圆上的整点(数论) 题面 BZOJ 洛谷 题解 好神仙的题目啊. 安利一个视频,大概是第\(7\)到\(19\)分钟的样子 因为要质因数分解,所以复习了一下\(Pollard\_r ...

  3. HAOI2008题解

    又来写题解辣-然而并不太清楚题目排列情况...不管辣先写起来- T1:[bzoj1041] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1 ...

  4. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  5. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  6. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  7. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  8. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  9. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

随机推荐

  1. UITextView 实现链接点击事件

    UILabel通过富文本可以实现图文混排,但是想要实现文字的点击效果好像不容易实现,这里有2种方法可以达到效果 YYLabel -->YYText框架 参考我之前的博客:http://www.c ...

  2. elasticsearch系列(四)部署

    本文采用tar包的方式部署es 准备jdk8的环境 5.4.0的es依赖jdk8及以上版本 下载linux版的jdk jdk-8u121-linux-x64.tar.gz tar -zvxf jdk- ...

  3. Codeforces Round #102 (Div. 2) 题解

    A. 解一个方程. 还是厚颜无耻地暴力吧~ #include <iostream> using namespace std; int r1, r2, c1, c2, d1, d2; boo ...

  4. 你知道现在有一种新的OCR技术叫“移动端车牌识别”吗?

    核心内容:车牌识别.OCR识别技术.移动端车牌识别.手机端车牌识别.安卓车牌识别.Android车牌识别.iOS车牌识别 一.移动端车牌识别OCR技术研发原理 移动端车牌识别是基于OCR识别的一种应用 ...

  5. 解决相关css基础问题

    //html代码 <div class="operateWays"> <label> <input type="radio" na ...

  6. Java泛型学习

    1.泛型的概念 泛型即"参数化类型",就比如我们定义方法的时候,定义一个变量,称为形参,变量值根据传进去的实参的值不同而改变.而泛型的出现,就是为了解决类型也能根据传进去的类型改变 ...

  7. 乐视开放平台技术架构-servlet和spring mvc篇

    在乐视风口浪尖的时候,敢于站出来说我是乐视的而不怕被打脸的,也就是我了.就算我以后不在乐视了,提起来在乐视工作过,我也还是挺骄傲的.因为这是一个有理想,敢拼敢干的公司.想起复仇者联盟里Fury指挥官的 ...

  8. java 1.8 动态代理源码分析

    JDK8动态代理源码分析 动态代理的基本使用就不详细介绍了: 例子: class proxyed implements pro{ @Override public void text() { Syst ...

  9. div+css的属性

    div+css的属性 gCascading Style Sheet 层叠式样式表 ==> 层叠样式表 Internal Style Sheet 内部样式表 External Style Shee ...

  10. 排序算法 - 选择排序(selection sort)

    选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...