题目来源
2018中国大学生程序设计竞赛网络选拔赛 1004
题目
给定n(0<=n<=1e9)和a(3<=a<=4e4),
求成立的b和c,无解输出两个-1
思路来源
https://blog.csdn.net/jk_chen_acmer/article/details/82078532
题解
费马大定理,n>=3无解;
n==0,显然1+1≠1,也无解
n==2的时候,构造勾股数,
①a为奇数,答案为,
,
②a为偶数,答案为,
,
之前总觉得很神奇,以为是什么很难推导的结论
后来发现,就是令x-y=1,x+y=a*a,让a当一条直角边
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int T;
ll n,a;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&n,&a);
if(n==1)printf("%lld %lld",1ll,a+1);
else if(n==2)//技巧:奇偶与a*a/2和a*a/4有关,考虑a==3或a==4,凑出3 4 5即可
{
if(a&1)printf("%lld %lld\n",a*a/2,a*a/2+1);
else printf("%lld %lld\n",a*a/4-1,a*a/4+1);
}
else puts("-1 -1");//n==0||n>=3
}
return 0;
}