转载自:http://blog.csdn.net/acdreamers/article/details/8522384

费马平方和定理:奇质数能表示为两个平方数之和的充分必要条件是该素数被4除余1。

结论(1):如果两个整数都能表示为两个平方数之和,则它们的积也能表示为两个平方数之和。

结论(2):如果一个能表示为两个平方数之和的整数被另一个能表示为两个平方数之和的素数整除,则它们的商也能

表示为两个平方数之和。

定理: 正整数n 能表示为两平方数之和的充要条件,是在它的标准分解式中,形如4k+3的素因数的幂指数是偶数.

分析:其实这个定理不难证明,利用费马平方和定理,可以知道一个奇质数能表示为两个数的平方和的充要条件是

该素数除4余1,那么换句话说就是一个4k+3型的素数一定不能表示为两个整数的平方和,因为素数就可以分

为4k+1型和4k+3型,再利用上面的结论(1),这样很明显只需要4k+3型的素数为偶数个就行了。

详细内容见这里:

http://zh.wikipedia.org/wiki/%E8%B4%B9%E9%A9%AC%E5%B9%B3%E6%96%B9%E5%92%8C%E5%AE%9A%E7%90%86

那么丢番图方程:有多少个解呢?

可以通过下面的公式计算:

,其中满足当d为偶数时,,当d为奇数时,

比如,BZOJ的1041题用本方法就很方便。

一些关于平方和的结论:

(1)四平方和定理:每个正整数都可以表示成四个整数的平方数之和。在这个定理中,四个整数中可以有为0的。

(2)正整数n能表示为三个数的平方和的充要条件是n不可以表示为的形式,其中m,k为非负整数。

(3)每一个大于等于170的整数n,都可以表示为五个正整数的平方和。

Timus Online Judge网站上有这么一道题目:1593.Square Country.Version2。

这道题目的输入是一个不大于10^15的正整数,要求计算出该正整数最少能够使用多少个正整数的平方和来表示。这

道题目的时间限制是1秒。根据上面的结论很容易写出代码:

[cpp] view plaincopy
  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <math.h>
  5. using namespace std;
  6. typedef long long LL;
  7. int Solve(LL n)
  8. {
  9. int i,k;
  10. LL tmp;
  11. while(n%4==0) n>>=2;   //先消去所有4的因数
  12. if(n%8==7)  return 4;  //如果不能表示为三个整数平方和,那么也就不能表示为两个数的平方和
  13. for(i=8,tmp=9;tmp<=n;i+=8,tmp+=i)  //消去所有素因子的偶次幂
  14. while(n%tmp==0) n/=tmp;
  15. if(n==1) return 1;
  16. if(n%2==0) n>>=1;
  17. if(n%4==3) return 3;
  18. for(k=sqrt(n),i=3;i<=k&&n%i;i+=4);
  19. return i>k? 2:3;
  20. }
  21. int main()
  22. {
  23. LL n;
  24. while(cin>>n)
  25. cout<<Solve(n)<<endl;
  26. return 0;
  27. }

关于丢番图方程x^2+y^2=n相关推荐

  1. 初等证明:使用无穷下降法证明丢番图方程x^4 - y^4 = z^2无非零整数解

    题:使用无穷下降法证明丢番图方程x4−y4=z2x^4 - y^4 = z^2x4−y4=z2无非零整数解.(摘自<初等数论及其应用第六版>13.313.313.3习题444) 前言:近来 ...

  2. 数论读书笔记——算数基本定理

    欧几里得: 欧几里得算法: 定理1:整数a≥b>0,令r0=a,r1=b如果我们做带余除法得到rj=r(j+1)q(j+1)+r(j+2),且0<r(j+2)<r(j+1),j=0, ...

  3. linux 内核配置简介

    Gentoo Linux Gentoo内核(gentoo-sources)特有的选项 Gentoo Linux support CONFIG_GENTOO_LINUX 选"Y"后, ...

  4. java知识精华总结

    Java 知识--精华总结 一. -java 概述与基础知识-6 1.何为编程?-6 2.Java 语言概述,历史.特点- 6 3.什么是跨平台性?原理是什么?JVM- 7 4.Jre 和 Jdk 的 ...

  5. 2.4 线性丢番图方程

      线性丢番图方程Linear Diophantine equation,名字听得非常高大上的.但是实际上很简单的,线性丢番图就是下面这种形式的方程: ax+by=cax+by=c ax+by=c   ...

  6. 知识点 - 线性丢番图方程 Linear Diophantine Equations

    知识点 - 线性丢番图方程 Linear Diophantine Equations 解决问题类型: 对于不定方程(a,b,c是给定参数,x,y为系数) ax+by=cax + by = c ax+b ...

  7. 线性丢番图方程 --算法竞赛专题解析(21):数论

    本系列文章将于2021年整理出版.前驱教材:<算法竞赛入门到进阶> 清华大学出版社 网购:京东 当当   作者签名书:点我 公众号同步:算法专辑    暑假福利:胡说三国 有建议请加QQ ...

  8. 佩尔方程及其在一类二元二次丢番图方程的推广

    文章目录 前言 标准型佩尔方程 性质 求最小解 暴力写法 连分数写法 例题 非标准型佩尔方程 额外证明 求解没有xy项的二元二次丢番图方程 例题 后记 前言 这是一篇欠了半年多的博客,期间笔者遇到了诸 ...

  9. 扩展欧几里得算法 求解 丢番图方程

    丢番图方程: 有一个或者几个变量的整系数方程,它们的求解仅仅在整数范围内进行. a * x + b * y = c  ( 其中所有数均为整数, 已知 x, y, c )        例如:鸡兔同笼问 ...

最新文章

  1. 对异步脉冲信号的处理——不归0翻转电路
  2. c++中的函数模版和类模版
  3. 电脑有摄像头吗_知道ip地址就能入侵摄像头吗?
  4. hdu4561 连续最大积
  5. 《Python Cookbook 3rd》笔记(5.19):创建临时文件和文件夹
  6. 使用.NET程序集作为Business Data Connectivity数据源(二)
  7. java获取当前日期时间_Java日期时间API系列10-----Jdk8中的DateTimeFormatter
  8. 在git 服务器挂载、创建新的项目、克隆新的项目
  9. 375 Inscribed Circles and Isosceles Triangles 等腰三角形 内接圆 圆周率PI表示
  10. Windows 环境下分布式跨域Session共享(转)
  11. USACO 2.1 海明码(DFS)
  12. 设计模式GOF23大纲
  13. 数据库课程设计(实训)
  14. 计算机系统如何禁止删除文件,如何彻底删除文件防止恢复【详细介绍】
  15. 2022强网杯web(部分)
  16. OpenFoam | 全面解析sprayFoam | 一、对象parcels属于哪个类
  17. 20+主流跨境电商平台API地址大全
  18. python电脑版怎么下载-Python
  19. esp8266解析php,ESP8266 Bootloader开源代码解析之rboot(一)
  20. ws2812怎么调亮度_笔记本调节亮度无效!!!!!

热门文章

  1. c语言分离个位十位百位_用c语言如何表示出一个数的个位,百位,十位
  2. install Wine + 迅雷 in Fedora 31
  3. cannon的英文名_卡农的作者是谁啊 此曲的赏析 英文名cannon不是大炮吗
  4. flash不同颗粒SLC、MLC、TLC、QLC擦写次数
  5. 【OpenCV + Python】之bitwise_and、bitwise_not,bitwise_xor等图像基本运算(opencv位操作)
  6. 实验指南:BGP路由汇聚(下)
  7. str_rot13() 函数
  8. 商城项目02_环境搭建、安装VAGRANT、DOCKER、MYSQL、REDIS、从0搭建各个微服务项目、数据库初始化、安装NGINX
  9. Arranging Heaps
  10. 开源软件漏洞升级步骤