1243: CKJ老师爱数学

时间限制: 1 Sec  内存限制: 128 MB
提交: 56  解决: 13
[提交][状态][讨论版]

题目描述

众所周知,CKJ老师非常热爱数学,他对于方程组的有自己的独到的研究,today,他抛给了你一个too simple的方程组x^2+y^2=z^2,z是一个已给的正整数,然后他毫不客气地问你,这个方程组的整数解有几个?

输入

包含一个整数T表示输入数据组数,

接下来T行每行一个整数z(z<=2000 000 000)

输出

每行一个整数表示方程组的解的个数

样例输入

1
4

样例输出

4
---------------------------------------------------------------------------------------------

自认为这是xdoj上思考最多的一道题: 网上好像有这样题的公式,但做题最要的不是理解学习心得知识吗。

首先我贴出一些知识点:

1) 定理 1   x2 + y2 = z2 的互質整數解為 x=2uvy=u2-v2, 其中 uv 是任意互質整數,且 uv 不同時為奇數。

證明 1 令 xyz 是互質正整數,且 x2 + y2 = z2。若 x 與 y 都是奇數,則 z 是偶數。故 x2 + y2 是 4l+2 的型式,z2 是 4l' 的型式(l 與 l' 是整數)。矛盾。

因此,不妨假定 x 是偶數,y 與 z 是奇數。

由 x2 = z2 - y2 = (z+y) (z-y),令 x=2rz-y = 2sz+y = 2t。得 r2 = st

s 與 t 互質,因 y 與 z 互質。但 st 是完全平方。故 s=u2 , t=v2。得證。

网址链接:http://episte.math.ntu.edu.tw/articles/mm/mm_07_4_01/page3.html

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

3)定理三:  (a^2+b^2)*(c^2+d^2)==(ac+bd)^2+(ad-bc)^2

网址链接: https://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

问题解决:

 1 借助定理1 将x^2+y^2=z^2  转化为 x^2+y^2=n 有多少整数解

 2 每个整数解我们可以看出是由本原解组成(三个数互质)【 3,4,5】是,而【6,8,10】不是

3 z=p1^k1*p2^k2*....pn^kn      

根据定理二  对于每个素数pk且满足pk%4==1   一个本原解  a^2+b^2==pk

对于每一个素数要么可以充当本原解的组成,要么组成解的因子  

所以对于每一个因子可以有(2*sum+1) 种选择

eg (z==25   sum=2  有五种选择

     1+4=5;  解得x=5^2*(2*u*v)=4*25=100; y=25*(u^2-v*2)=75;【一个5是因子,一个5组成本原解】

     3^2+4^2=25  解得y=2uv=24; x=u*2-v*2=7;                         【两个5都是本原解】

    两个解调换位置 4个解

   25全部作为因子  1个解

4  根据定理三  两个本原解可以合并乘一个本原解  所以不同因子之间是相乘关系

一共有   ans=∏ (2*pk+1)-1  本原解  【 减一是排除所有素数作为因子】

考虑正负号   ans*=4

再加上四个点  sum=ans+4;         【端点我们不认为是本原解】

 #include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
const LL N=1e6+;
LL p[N+];
int main ()
{
for (LL i=;i<=N;i++) {
if (!p[i]) p[++p[]]=i;
for (LL j=;j<=p[]&&i*p[j]<=N;j++) {
p[i*p[j]]=;
if (i%p[j]==) break;
}
}
int T;
scanf ("%d",&T);
while (T--) {
LL x;
scanf("%lld",&x);
LL i=;
LL ans=;
while (p[i]*p[i]<=x) {
LL sum=;
if (x%p[i]==) {
while (x%p[i]==) {
sum++;
x=x/p[i];
}
if (p[i]%==)
ans=ans*(*sum+);
}
i++;
}
if(x!=&&(x%==)) ans=ans*;
printf("%lld\n",(ans-)*+);
}
return ;
}

这完全是我自己的理解,可能存在说的不清晰地方或者不严谨,请

多多指教;

xdoj-1243 (费马平方和问题)的更多相关文章

  1. BZOJ 1041 [HAOI2008]圆上的整点:数学【费马平方和定理】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...

  2. 费马平方和定理&&斐波那契恒等式&&欧拉四平方和恒等式&&拉格朗日四平方和定理

    费马平方和定理 费马平方和定理的表述是:奇素数能表示为两个平方数之和的充分必要条件是该素数被4除余1. 1. 如果两个整数都能表示为两个平方数之和的形式,则他们的积也能表示为两个平方数之和的形式. $ ...

  3. hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                  ...

  4. nyoj1000_快速幂_费马小定理

    又见斐波那契数列 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列 ...

  5. poj 3734 Blocks 快速幂+费马小定理+组合数学

    题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...

  6. 数论初步(费马小定理) - Happy 2004

    Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2 ...

  7. 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  8. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  9. HDU 5667 Sequence 矩阵快速幂+费马小定理

    题目不难懂.式子是一个递推式,并且不难发现f[n]都是a的整数次幂.(f[1]=a0;f[2]=ab;f[3]=ab*f[2]c*f[1]...) 我们先只看指数部分,设h[n]. 则 h[1]=0; ...

随机推荐

  1. Qt动态布局

    QVBoxLayout *m_pvLayout = NULL: QWidget *m_pWidgetPlay = NULL: m_pvLayout = new QVBoxLayout(this); m ...

  2. RabbitMQ进阶使用-延时队列的配置(Spring Boot)

    依赖 MAVEN配置pom.xml <dependency> <groupId>org.springframework.boot</groupId> <art ...

  3. .NET接入UnionPay银联支付(一)手机wap支付

    最近呢,比较忙,公司在接入银联全渠道支付,博主接手的wap支付,发表一下博主在接入的时候遇到的坑和注意事项,方便大家学习接入,爬坑的路上更顺利一点~ 开发步骤 1. 以表单的方式组装要发送给银联全渠道 ...

  4. flask项目结构(三)使用蓝图

    简介: Flask中的蓝图旨在针对这些情况: 把一个应用分解成一系列的蓝图.对于大型的应用是理想化的:一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图. 以一个 URL 前缀和/或子域 ...

  5. JXL生成Excel,并提供下载(2:提供下载)

    实现效果: 项目中使用JXL生成Excel,使生成的Excel可以让用户下载,如下图 一.生成Excel 二.提供下载 实现思路: 1.页面使用form表单提交方式(Ajax提交方式,我这里不行) 2 ...

  6. 5.4 C++重载输入与输出操作符

    参考:http://www.weixueyuan.net/view/6382.html 总结: 在C++中,系统已经对左移操作符“<<”和右移操作符“>>”分别进行了重载,使其 ...

  7. java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.test.Test

    由于我在第二个Activity中指定了进程名字,但是服务却没有指定进程名(默认跟主入口一个进程)所以报错. 网上找到的是 服务 和绑定服务的客户端必须在同一个application或者进程中,所以Ma ...

  8. spring源码研究2 自定义标签实现及使用

    1.自定义标签实现及使用参考: http://blog.csdn.net/fighterandknight/article/details/50112701 1)创建一个需要扩展的组件 User.ja ...

  9. NioEventLoop中的thread什么时候启动

    在构造函数中被赋值,并传入传入runnable接口,方法里面循环select,然后处理找到的key 但是这个thread是什么时候被start的呢? 在bootstrap bind的逻辑里,后半部分是 ...

  10. cf467D(map,vector,bfs,特点提取)

    D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...