HDU:http://acm.hdu.edu.cn/showproblem.php?pid=6441

1.首先百度百科了解一下费马大定理:

2.所以,我们便可分为几种情况:
(1)n>2,无解,输出-1,-1;
(2)n=2:则有a^2+b^2=c^2,给出a,则凑勾股数即可。
(3)n=1:则有a+b=c,因为b>=1,就取b=1,c=a+1;
(4)n=0:无解,输出-1,-1;
3.我们特别讨论一下n=2的情况,凑勾股数:
给定a的值,由a^2+b^2=c^2求出b和c。
---------------------------------------------------------------------------------------------------------------------------
完整代码:
#include <iostream>
#include <set>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,a;
cin>>n>>a;
if(n==0 || n>2){
cout<<-1<<" "<<-1<<endl;
}else if(n==1){
cout<<1<<" "<<a+1<<endl;
}else if(n==2){
if(a%2==0){
int x=a/2;
cout<<x*x-1<<" "<<x*x+1<<endl;
}else {
int x=(a-1)/2;
cout<<2*x*x+2*x<<2*x*x+2*x+1<<endl;//注意计算尽量这样构造
}
}
}
}
本文深入探讨了费马大定理,分析了不同情况下勾股数的求解方法,特别是当n等于2时,如何通过给定的a值计算出b和c,提供了一种构造勾股数的有效算法。
545

被折叠的 条评论
为什么被折叠?



