求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,检验一下是否满足之前推导中的条件即可,再加上坐标轴上和其余象限的答案。

  这样的复杂度并不显然,不过感觉上明显低于线性,并且一个数的因数个数是有比较优秀的上界的:n1.066/ln(ln n)。http://vfleaking.blog.163.com/blog/static/174807634201341913040467/

  还有O(分解质因数)的神仙做法,似乎将素数拓展到了复平面,并不可能懂。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define ll long long
int n,ans=;
ll m;
ll gcd(ll n,ll m){return m==?n:gcd(m,n%m);}
void solve(ll x)
{
if (x>=n) return;
for (int i=;i*i*x<=n;i++)
{
int a=i*i;
if (gcd(a,m/x-a)==&&((ll)sqrt(m/x-a))*((ll)sqrt(m/x-a))==m/x-a) ans++;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj1041.in","r",stdin);
freopen("bzoj1041.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read();m=1ll*n<<;
for (ll i=;i*i<=m;i++)
if (m%i==)
{
solve(i);
if (i*i<m) solve(m/i);
}
cout<<(ans+<<);
return ;
}

最新文章

  1. WEB文件上传漏洞介绍解决办法
  2. hdu 1008 Elevator
  3. Java基础知识强化之IO流笔记60:打印流 之 改进复制文本文件的案例
  4. poj 2723 Get Luffy Out 二分+2-sat
  5. 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法
  6. SqlHelper帮助类_上(SQLServer数据库含Connection详解)
  7. shell 之解释器、变量、字符串、数组
  8. Oracle_字段数据类型
  9. 1013团队Beta冲刺day2
  10. 控制公司 Controlling Companies
  11. python之以字符串形式导入模块
  12. 哪些人才适合转行学习UI设计?
  13. 第 6 章 存储 - 039 - Data Volume 之 bind mount
  14. 【python-crypto】导入crypto包失败的情况,怎么处理
  15. 配置Windows 防火墙,允许SQL Server的远程连接
  16. hdu 5427(排序水题)
  17. Orleans核心功能
  18. maven pom文件结构简析
  19. 【AI】face_recognition
  20. 出现“基础链接已关闭,无法链接到远程服务器&quot;错误的解决办法

热门文章

  1. ping + traceroute + tracert + tcpdump等命令的原理
  2. LINQ Group By操作(转载)
  3. Spring Extensible XML
  4. cssie7.0兼容
  5. 关于小程序登录时获取openId和unionId走过的坑
  6. flask-socketio笔记
  7. Mycat读写分离、主从切换、分库分表的操作记录
  8. centos7.2部署vnc服务记录
  9. Jmeter(GUI模式)教程
  10. 网络编程学习笔记:Socket编程