思路
- 利用费马大定理,
a
n
+
b
n
=
c
n
a^n +b^n=c^n
an+bn=cn在n>2时无解,所以只要考虑n=1和n=2的情况
- n=2时,利用勾股定理,
- 当a为奇数的时候,
b
=
(
a
2
−
1
)
/
2
,
c
=
(
a
2
+
1
)
/
2
b=(a^2-1)/2,c=(a^2+1)/2
b=(a2−1)/2,c=(a2+1)/2
- 当a为偶数时,
b
=
a
2
/
4
−
1
,
c
=
a
2
/
4
+
1
b=a^2/4-1,c=a^2/4+1
b=a2/4−1,c=a2/4+1
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
const int N=2e5+5;
int main(){
int T;
cin >> T;
while(T--){
int n,a;
scanf("%d%d",&n,&a);
if(n==1){
printf("%d %d\n",a+1,a+a+1);
continue;
}
if(n==2){
if(a%2){
printf("%d %d\n",(a*a-1)/2,(a*a+1)/2);
}else{
printf("%d %d\n",a*a/4-1,a*a/4+1);
}
continue;
}
printf("-1 -1\n");
}
}