题意是给定 n 和 a,问是否存在正整数 b,c 满足:a^n + b^n == c^n.输出 b  c,若不存在满足条件的 b,c,输出 -1 -1。

当 n > 2 时,由费马大定理,不存在正整数 a,b,c 满足 a^n + b^n == c^n ,也就是说当 n 大于 2 时,只能输出 -1 -1 。接下来问题就可以变成 n 分别取 0,1,2 的情况了。

当 n == 1 时,由于只要输出任意一组合理解即可,则 b 为 1 ,c 为 a + 1 即可。

当 n == 0 时,条件变成了 1 + 1 == 1,无法满足,输出 -1 -1.

当 n == 2 时,条件变成了 a^2 + b^2 == c^2 也就是在已知 一个勾股数的情况下,求其他两个勾股数。

勾股数:2 * k + 1,2 * k * ( k + 1 ),2 * k * ( k + 1 ) + 1( k 为正整数 )

当 a 为奇数时,则 a = 2 * k + 1 ,解得 k 的值,则 b = 2 * k * ( k + 1 ),c = 2 * k * ( k + 1 ) + 1;

当 a 为偶数时,则 a 可能等于 p * ( 2 * k + 1 ),也可能等于 2 * k * ( k + 1 ) ,

检查 a 是否可以被 4 整除,若能,则属于后一种情况,p = a / 4,那么 b = p * 3,c = p * 5;(此处算 k 太麻烦,直接用 3,4,5 这组勾股数及其倍数)

若 a 不能被 4 整除,令 a 不断除以 2 ,若在 a 变成 1 之前,a 可以为奇数,那么就属于前一种情况,即 a = p * ( 2 * k + 1 ) ,p = a / a'( a' 即为 a 多次除以 2 变成的非 1 奇数,所以在除以 2 之前要把 a 的值赋给一个变量),求出 k 的值,

则 b =( 2 * k * ( k + 1 ) ) *  p ,c = ( 2 * k * ( k + 1 ) + 1) * p;

若上述情况都得不到 b,c,则输出 -1 -1 即可。

代码如下:

 #include<bits/stdc++.h>
using namespace std;
__int64 p,a,n,wu;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%I64d%I64d",&n,&a);
if(n>||n==) puts("-1 -1");
else if(n==) printf("1 %I64d\n",+a);
else
{
wu = a;
if(a%==)
{
p = a/;
printf("%I64d %I64d\n",p*,p*);
wu = ;
}
else
{
while(!(wu&)) wu>>=;// 当a是偶数时不断除以2
if(wu==) puts("-1 -1");
else
{
p = a / wu;
wu = (wu-)>>;
printf("%I64d %I64d\n",(wu*wu*+wu*)*p,(wu*wu*+wu*+)*p);
}
}
}
}
return ;
}

这题在 vjudge 上用 int 能过,但在 hdu 上会 wa,要换成 long long 才能过......

hdu 6441 (费马大定理+勾股数 数学)的更多相关文章

  1. HDU 6441 费马大定理+勾股数

    #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se ...

  2. hdu 6441 Find Integer(费马大定理+勾股数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6441(本题来源于2018年中国大学生程序设计竞赛网络选拔赛) 题意:输入n和a,求满足等式a^n+b^ ...

  3. 2015浙工大校赛-Problem C: 三角—— 费马大定理+勾股数

    题目 有一个直角三角形三边为 A,B,C 三个整数.已知 C 为最长边长,求一组B,C,使得B和C最接近. (题目链接) 分析 打表找规律. 或者直接一点的枚举 $C-B$ 的值.(既然枚举 B 不现 ...

  4. HDU - 6441(费马大定理)

    链接:HDU - 6441 题意:已知 n,a,求 b,c 使 a^n + b^n = c^n 成立. 题解:费马大定理 1.a^n + b^n = c^n,当 n > 2 时无解: 2. 当 ...

  5. 2018中国大学生程序设计竞赛 - 网络选拔赛 4 - Find Integer 【费马大定理+构造勾股数】

    Find Integer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  6. hdu6441 Find Integer 求勾股数 费马大定理

    题目传送门 题目大意: 给出a和n,求满足的b和c. 思路: 数论题目,没什么好说的. 根据费马大定理,当n>2时不存在正整数解. 当n=0或者1时特判一下就可以了,也就是此时变成了一个求勾股数 ...

  7. 数学--数论--Find Integer(勾股数定理)

    Problem Description people in USSS love math very much, and there is a famous math problem give you ...

  8. 数学--数论--直角三角形--勾股数---奇偶数列法则 a^2+b^2=c^2

    先说勾股数: 勾股数,又名毕氏三元数 .勾股数就是可以构成一个直角三角形三边的一组正整数.勾股定理:直角三角形两条直角边a.b的平方和等于斜边c的平方(a²+b²=c²) 勾股数规律: 首先是奇数组口 ...

  9. 勾股数专题-SCAU-1079 三角形-18203 神奇的勾股数(原创)

    勾股数专题-SCAU-1079 三角形-18203 神奇的勾股数(原创) 大部分的勾股数的题目很多人都是用for来便利,然后判断是不是平方数什么什么的,这样做的时候要对变量类型和很多细节都是要掌握好的 ...

随机推荐

  1. LOJ2255. 「SNOI2017」炸弹 (线段树)

    本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ...

  2. bzoj3160(FFT+回文自动机)

    题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3160 题解 先把问题转化一下,我们要求的是非连续对称回文子序列. ans=回文子序列数- ...

  3. Dos 批处理 Shutdown

    第一步: win + R,打开"运行" 第二步: 输入cmd 第三步: 输入color a或color b改成自己喜欢的颜色 第四步: 在shutdown后面输入不同的命令达到不同 ...

  4. JDK8中的并行流

    1.IntStream.parallel():获取并行流处理 2. Collection中调用parallelStream()获取并行流 3.并行排序Arrays.parallelSort()

  5. Django(五)框架之模板继承和静态文件配置

    https://www.cnblogs.com/haiyan123/p/7731959.html 一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% end ...

  6. cnblogs latex公式

    选项->启用数学公式支持 \begin{equation*} \begin{split} &xxx\\ &xxx\\ \end{split} \end{equation*} (\ ...

  7. linux系统调用之文件系统操作

    access 确定文件的可存取性 chdir 改变当前工作目录 fchdir 参见chdir chmod 改变文件方式 fchmod 参见chmod chown 改变文件的属主或用户组 fchown ...

  8. 常用工具类(System,Runtime,Date,Calendar,Math)

    一.System: 一个java.lang包中的静态工具类. 三大字段: static PrintStream err “标准”错误输出流. static InputStream in “标准”输入流 ...

  9. 遍历List过程中同时修改

    public static void Main() { List<int> list = new List<int>(); ,,,,,,,,,}; list.AddRange( ...

  10. /bin/bash^M:损坏的解释器: 没有那个文件或目录

    由于在Windows下换行是\n\r,在Linux下打开多了\r,所以需要删除.删除命令 :sed -i 's/\r$//' filename -i插入 s替代模式 \r$表示任何以\r结束的字符 整 ...