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;//注意计算尽量这样构造
}
}
}
}