求一个给定的圆(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. Java 命令后台运行jar包

    nohup  java -jar XX.jar >temp.text & nohup 客户端关闭,后台继续运行 & 客户端关闭,后台停止运行 temp.text 是存控制台文件 ...

  2. Libsvm使用资料

    原理: 1. pluskid(张弛原)的支持向量机教程(人家现在都是大牛了) http://blog.pluskid.org/?page_id=683 2. JerryLead机器学习教程 http: ...

  3. Coursera 机器学习笔记(七)

    主要为第九周内容:异常检测.推荐系统 (一)异常检测(DENSITY ESTIMATION) 核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非 ...

  4. vue入门须知

    1.vue基本结构 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...

  5. [Lucene]-Lucene基本概述以及简单实例

    一.Lucene基本介绍: 基本信息:Lucene 是 Apache 软件基金会的一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Luc ...

  6. [BZOJ1597]土地购买

    Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...

  7. colinux

    Colinux是什么?2004年,由一名21岁的以色列学生与几名日本的自由程序员合作开发出了一个名为“Cooperative Linux”即“CoLinux”的Linux程序,该程 序可使Linux的 ...

  8. sed的用法

    1.什么是sed sed命令是一个流线式.非交互式编辑器,可以实现在vi等编辑器中一样的编辑效果.   2.sed的工作原理 模式空间(pattern space) sed一次处理一行文本(或输入), ...

  9. 流畅的python学习笔记:第三章

    字典的变种: OrderedDict 首先来看下面的代码,在一个字典中,有name,age,city,在遍历这个字典的时候.顺序却是随机的,不是按照我们添加的顺序也就是name->age-> ...

  10. 原生javascript实现网页显示日期时钟效果

    刚接触javascript中Date内置对象时,以为这些方法都太简单了,结果要自己实际操作写一个时钟效果还真一时把我难住了,主要有几点大家要注意的.先看实际效果 要实现这样的效果 某年某月某日星期几几 ...