思路:

$x^2+y^2=r^2$
$y=\sqrt{(r+x)(r-x)}$
令$ d=gcd(r+x,r-x)$
设A=$(r-x)/d$   $B=(r+x)/d$
则$gcd(A,B)=1$
$y^2=d^2*A*B$
∵$d、y$为完全平方数、$gcd(A,B)=1$、且$A!=B$(在坐标轴上的最后算)
∴$A、B$为完全平方数
设$a^2=(r+x)/d  b^2=(r-x)/d$
则$a^2+b^2=2r/d$
即d是2r的约数
那我们就$1到\sqrt{2r}$枚举约数
再枚举a (从$\sqrt{r/d}$枚举到$\sqrt{2r/d}$) $a^2=(r+x)/d$
$b^2=(r-x)/d=2r/d-a^2$
判断一下$gcd(a^2,b^2)$是不是等于1且$a!=b!=0$且$\sqrt{b}^2==b$
最后答案就是ans*4(四个象限)+4(坐标轴上的)

//By SiriusRen
#include <cmath>
#include <cstdio>
using namespace std;
#define int long long
int r,ans;
int gcd(int x,int y){return y?gcd(y,x%y):x;}
void solve(int d){
int lst=sqrt(*r/d),fst=sqrt(r/d);
if(fst*fst<r/d)fst++;
for(int a=fst;a<=lst;a++){
int sqrb=*r/d-a*a,b=sqrt(sqrb);
if(a&&b&&b*b==sqrb&&a!=b&&gcd(a*a,sqrb)==)ans++;
}
}
signed main(){
scanf("%lld",&r);
int sqr=sqrt(*r);
for(int d=;d<=sqr;d++)if((*r)%d==)solve(d),solve(*r/d);
printf("%lld\n",ans*+);
}

最新文章

  1. python设计模式之--单例模式
  2. vi命令示例大全
  3. jquery 获取input radio/checkbox 的值 【注意写法】
  4. TI CC2541的GPIO引脚设置.
  5. [原创]基于html5新标签canvas写的一个小画板
  6. Keil uVision4 代码编辑器中文字符乱码问题
  7. clion windows 开发配置
  8. Emmet:HTML/CSS代码快速编写神器(转)
  9. sphinx配置文件继承
  10. divmod(a,b)函数
  11. 利用npm安装/删除/发布/更新/撤销发布包 --社会我npm哥,好用话不多
  12. [H5]range对象之selectNode等方法
  13. [Swift]LeetCode827. 最大人工岛 | Making A Large Island
  14. ES6 语法学习(一)
  15. Java作业:第一次过程性考核 ——长春职业技术学院 16级网络工程
  16. 【Android基础】利用Intent在Activity之间传递数据
  17. Python3学习笔记03-基础数据类型
  18. 【转】Oracle 自定义函数语法与实例
  19. C#中DataTable
  20. 用vbs打开文件

热门文章

  1. 黑客常用dos命令
  2. Android使用NDK---函数参数传递-基本类型和数组
  3. 读白帽子web安全笔记
  4. react基础篇一
  5. appium处理app与web页面的转换
  6. Mysql分组求和&amp;LIMIT
  7. dataGridView 设置
  8. java操作Excel的poi 遍历一个工作簿
  9. 08 Django组件-Forms组件
  10. GETDATE()