数学


  orz hzwer

  完全不会做……

  很纠结啊,如果将来再遇到这种题,还是很难下手啊……

引用题解:

【分析】:

样例图示:

首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否算出的值是否为整点,这样的枚举量为2*N,显然过不了全点。

然后想数学方法。

有了上面的推理,那么实现的方法为:

枚举d∈[1,sqrt(2R)],然后根据上述推理可知:必先判d是否为2R的一约数。

此时d为2R的约数有两种情况:d=d或d=2R/d。

第一种情况:d=2R/d。枚举a∈[1,sqrt(2R/2d)] <由2*a*a < 2*R/d转变来>,算出对应的b=sqrt(2R/d-a^2),检查是否此时的A,B满足:A≠B且A,B互质 <根据上面的推理可知必需满足此条件>,若是就将答案加1

第二种情况:d=d。枚举a∈[1,sqrt(d/2)] <由2*a*a < d转变来>,算出对应的b=sqrt(d-a^2),检查是否此时的A,B满足:A≠B且A,B互质 <根据上面的推理可知必需满足此条件>,若是就将答案加1

因为这样只算出了第一象限的情况<上面枚举时均是从1开始枚举>,根据圆的对称性,其他象限的整点数与第一象限中的整点数相同,最后,在象限轴上的4个整点未算,加上即可,那么最后答案为ans=4*第一象限整点数+4

【时间复杂度分析】:

枚举d:O(sqrt(2R)),然后两次枚举a:O(sqrt(d/2))+O(sqrt(R/d)),求最大公约数:O(logN)

 1 /**************************************************************
 2     Problem: 1041
 3     User: Tunix
 4     Language: C++
 5     Result: Accepted
 6     Time:192 ms
 7     Memory:816 kb
 8 ****************************************************************/
 9
10 //BZOJ 1000
11 #include<cmath>
12 #include<cstdio>
13 using namespace std;
14 typedef long long LL;
15 typedef double lf;
16 /******************tamplate*********************/
17 LL r,ans;
18 LL gcd(LL x,LL y){return y?gcd(y,x%y):x;}
19 bool check(LL y,lf x){
20     if (x==floor(x)){
21         LL x1=x;
22         if (gcd(x1*x1,y*y)==1 && x1*x1!=y*y)
23             return 1;
24     }
25     return false;
26 }
27 int main(){
28     scanf("%lld",&r);
29     for(LL d=1;d<=sqrt(2*r);d++)
30         if (2*r%d==0){
31             for(LL a=1;a<=(LL)sqrt(2*r/(2*d));a++){
32                 lf b=sqrt((2*r)/d-a*a);
33                 if (check(a,b))ans++;
34             }
35             if (d!=2*r/d){
36                 for(LL a=1;a<=(LL)sqrt(d/2);a++){
37                     lf b=sqrt(d-a*a);
38                     if (check(a,b))ans++;
39                 }
40             }
41         }
42     printf("%lld\n",ans*4+4);
43     return 0;
44 }

View Code

1041: [HAOI2008]圆上的整点

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2376  Solved: 1019
[Submit][Status][Discuss]

Description

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

Input

r

Output

整点个数

Sample Input

4

Sample Output

4

HINT

n<=2000 000 000

Source

[Submit][Status][Discuss]

转载于:https://www.cnblogs.com/Tunix/p/4428004.html

【BZOJ】【1041】【HAOI2008】圆周上的点相关推荐

  1. bzoj 1041: [HAOI2008]圆上的整点

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

  2. 【BZOJ 1041】圆上整点

    1.题目链接.给定半径,找一下这个圆上有多少个整点.其实也就是格点. 2.这个题目其实是比较有意思的,做法也有很多种.比较常规的解法是: 到这里其实就好办了,因为x是一个平方数,A,B互质,所以A,B ...

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

  4. BZOJ 1041 圆上的整点 数学

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1041 题目大意: 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是 ...

  5. [BZOJ 1041] 圆上的整点

    Description 求一个给定的圆( x2+y2=r2 x 2 + y 2 = r 2 x^2+y^2=r^2),在圆周上有多少个点的坐标是整数 Input 只有一个正整数 n n n,n≤200 ...

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

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

  7. 将一根木棍分成三段,求这三段构成三角形的概率 和  在一圆周上任意取三个点构成锐角三角形的概率是多少

    将一根木棍分成三段,求这三段构成三角形的概率 设线段长度为a,任意分成三段长分别为x,y和a-x-y,显然有x>0,y>0,a-x-y>0,将这三个约束条件画到(x,y)二维平面坐标 ...

  8. 角度转弧度根据弧度计算圆周上点的坐标的方法

    #define AngleToRadian(angle) (M_PI/180.0f)*angle 以正东面为0度起点计算指定角度所对应的圆周上的点的坐标: float radian = AngleTo ...

  9. 圆周上任意取三点组成直角三角形的概率为0

    圆周上任意取三点组成直角三角形的概率为0! 不失一般性,我们在一个单位圆上做分割,下图中两点之间的弧长用对应的字母表示: 这时,根据圆周角与所夹弧长的关系可以把该问题转化为几何概型: 三角形为锐角三角 ...

最新文章

  1. linux 系统监控和进程管理
  2. 微信8.0之后,又悄悄上线新功能:别人“抢不到”的红包!赶紧看看灰度到你了没?...
  3. 1090 危险品装箱 (25 分)
  4. 8.Java格式化输出
  5. Python基础之二进制
  6. Rsync:一个很实用的文件同步命令
  7. Android NDK开发: 通过C/C++调用第三方so库
  8. linux新建用户切换后显示-bash-4.1$(转载)
  9. 拓端tecdat|R语言t检验和非正态性的鲁棒性
  10. 放大你的Rstudio窗口字体
  11. 公安装备效能评估系统软件
  12. Ubuntu1604 在startup 中添加开机自启动
  13. fn1-call-call-fn2-面试题
  14. celeste第二章_魂源蔚蓝-第二章:源士的力量体系-爱阅小说网
  15. PCBA水洗流程和工艺原理
  16. 用javascript实现九九乘法口诀表
  17. 云数据库RDS是什么
  18. 怎样查看自己的wifi密码?
  19. 【计算机原理与接口技术(UNIX)⑱】——并行 I/O 接口 [ 芯片8255A ]
  20. 爬虫豆瓣读书top250,保存为本地csv文件,可用excel查看(具体步骤和容易遇到的坑)

热门文章

  1. java对象的序列化机制详解
  2. div+css 你知道多少?值得一看
  3. matlab sort对矩阵某一维进行排序并记录之前索引
  4. ubuntu 常用快捷键、常用命令
  5. 用RAII技术管理资源及其泛型实现
  6. mysql 赋给用户权限 grant all privileges on
  7. nohup 命令 用途:不挂断地运行命令
  8. jsoup 获取html中body内容_Java 进阶 利用Jsoup获取HTML页面的各分页中的标题信息...
  9. linux操作系统2试题,RedHat Linux 9.0 操作系统测试题2
  10. 多线程 调用 axis 报错_java笔记录(三、多线程)