bzoj1041
数学题:x^2+y^2=r^2,已知r求整数解(x,y)的个数
首先考虑x,y>0的时候的个数(ans)
∵ x^2+y^2=r^2 ∴ x^2=r^2-y^2 ∴x^2=(r-y)(r+y)
设d=gcd(r-y,r+y); r-y=d*a^2; r+y=d*b^2; (a<b)
∵x^2=d^2*a^2*b^2 ∴x=d*a*b;
∵2*y=d*(b^2-a^2) ∴y=d*(b^2-a^2)/2;
∵2*r=d*(a^2+b^2) ∴d为2r的因子
∵2*r/d=a^2+b^2 且a<b ∴a<r/d
所以我们枚举d,a算出b,判断a,b是否互素,若互素,则满足条件,对答案的贡献++;
最后的答案就是ans*4+4(四个象限+4条坐标轴)
复杂度:均摊的,远远小于logn*sqrt(n)
/**************************************************************
Problem: 1041
User: syh0313
Language: C++
Result: Accepted
Time:116 ms
Memory:1300 kb
****************************************************************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using
namespace
std;
long
long
n,d,a,b;
int
ans;
long
long
gcd(
long
long
x,
long
long
y)
{
if
(x<y) {
long
long
cc=x; x=y; y=cc;}
long
long
r=x%y;
while
(r) {x=y; y=r; r=x%y;}
return
y;
}
void
work(
long
long
k)
{
for
(a=1;a*a<n/k;a++)
{
long
long
now=(2ll*n)/k-a*a;
b=
sqrt
(now);
if
(b*b!=now)
continue
;
if
(gcd(a,b)==1ll)
{
//printf("%lld %lld %lld %lld %lld\n",d*a*b,d*(b*b-a*a)/2,d,a,b);
ans++;
}
}
}
int
main()
{
scanf
(
"%lld"
,&n);
for
(d=1;d*d<=2*n;d++)
{
if
((2ll*n)%d!=0)
continue
;
work(d); work(2ll*n/d);
}
printf
(
"%d\n"
,ans*4+4);
return
0;
}
- Spring Boot Runner启动器
- Spring Boot自动配置原理、实战
- Spring Aware容器感知技术
- 深入探究frame和bounds的区别以及setbounds使用
- 如何生成二维码过程详解
- hashCode和identityHashCode的区别你知道吗?
- SpringCloud注册中心高可用搭建
- SpringMVC表单验证器的使用
- Hadoop作业提交与执行源码分析
- 一分钟开启Tomcat https支持
- Spring Enable*高级应用及原理
- 各hbase版本对hadoop各版本的支持情况
- 关于Java序列化你应该知道的一切
- cordova插件- Contacts
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法