bzoj1041】的更多相关文章

题意 给定一个圆\(x^2+y^2=z^2\),求圆周上有多少个点的坐标是整数. \(r\leq 2*10^9\) 分析 这道题目关键要知道一些勾股数的性质,剩下的就很好处理了. 勾股数的性质 参考:勾股数的基本组及其性质 定义1 如果正整数\(a\),\(b\),\(c\)能满足不定方程\(a^2+b^2=c^2\),则它们叫一组勾股数,用\([a,b,c]\)表示. 定义2 如果\([a,b,c]\)为一勾股数组,且\((a,b)=1\),则\([a,b,c]\)叫一个勾股数的基本组:全体勾…
退役狗在刷程書的過程中看到了一個有趣的視頻, 講解了一個有趣的問題. 在網上隨便搜索了一下居然還真的找到了一道以它爲背景的OI題目, BZOJ1041. 下面的內容會首先回顧一下視頻所討論的知識, 有了這些知識, 自然就明白應該怎麼去做這道題了. 另外, 這道題在網路上的解法大多是暴力求解, 這篇博客也提出了本題一個複雜度爲\(\mathcal{O}(分解質因數)\)的解決方案. 隱藏在素數規律中的\(\pi\) 首先介紹收斂於\(\pi\)的一個無窮級數: \[\pi = \lim_{N \r…
求x2+y2=r2的整数解个数,显然要化化式子.考虑求正整数解. y2=r2-x2→y2=(r-x)(r+x)→(r-x)(r+x)为完全平方数→(r-x)(r+x)/d2为完全平方数,d=gcd(r-x,r+x)→(r-x)/d·(r+x)/d为完全平方数,gcd((r-x)/d,(r+x)/d)=1→(r-x)/d和(r+x)/d均为完全平方数→(r-x)/d+(r+x)/d=2r/d为整数,即d|2r 于是我们可以以√n的复杂度枚举d,然后枚举√(r-x)/d,检验一下是否满足之前推导中的…
[BZOJ1041][HAOI2008]圆上的整点 题面 bzoj 洛谷 题解 不妨设\(x>0,y>0\) \[ x^2+y^2=r^2\\ y^2=(x+r)(x-r) \] 设\(r-x=ud,r+x=vd,(u,v)=1\) \[ y^2=d^2uv \] \(u,v\)一定为完全平方数 则\(u=s^2,v=t^2\)且必有\((s,t)=1\) \[ 2r=(u+v)d=(s^2+t^2)d\\ \Rightarrow\\ x=\frac{t^2-s^2}{2}d\\ y=dst\…
[BZOJ1041]圆上的整点(数论) 题面 BZOJ 洛谷 题解 好神仙的题目啊. 安利一个视频,大概是第\(7\)到\(19\)分钟的样子 因为要质因数分解,所以复习了一下\(Pollard\_rho\) #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #inclu…
基于圆的对称性,我们只需要考虑第一象限的整点即可满足条件的x,y都是整数数学上这类问题我们通常用一个量表示另一个量y^2=(r-x)(r+x)  (r-x)(r+x)要是完全平方数令d=gcd(r-x,r+x)则y^2=d^2*a*b a=(r+x)/d b=(r-x)/d;不难发现此时(a,b)=1 a≠b (不考虑坐标轴)要想是完全平方数即a是完全平方数,b也是完全平方数不难想到要先穷举d通过a=(r+x)/d b=(r-x)/d;可整理得a+b=2r/d 也就是说d是2r的约数穷举d的范围…
求一个给定的圆(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                                                                …
Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Sample Input 4 Sample Output 4 HINT Source Solution 网上有一个很好的证明 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll gcd(ll a, ll b) { r…
我能想得出怎么做才奇怪好吗 题解:http://blog.csdn.net/csyzcyj/article/details/10044629 #include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; ll read() { ll x=,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar…
Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Sample Input 4 Sample Output 4 Solution 一个有趣的视频 Code #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #define LL l…