2018 CCPC网络赛 1004 Find Integer(勾股数+费马大定理)
Problem Description
people in USSS love math very much, and there is a famous math problem .
give you two integers n,a,you are required to find 2 integers b,c such that an+bn=cn.
Input
one line contains one integer T;(1≤T≤1000000)
next T lines contains two integers n,a;(0≤n≤1000,000,000,3≤a≤40000)
Output
print two integers b,c if b,c exits;(1≤b,c≤1000,000,000);
else print two integers -1 -1 instead.
Sample Input
1
2 3
Sample Output
4 5
题意:
本题是Special Judge,共有T组数据,每组数据给出n和a,让我们找到一个符合an+bn=cn的b和c,若不存在输出-1 -1。
思路:
(1) 根据费马大定理可知:当整数n >2时,关于a, b, c的方程 a^n + b^n = c^n 没有正整数解,所以只需讨论n≤2的情况。
(2) 当n=0时,会得到等式1+1=1,显然不可能。
(3) 当n=1时,会得到等式a+b=c,输出符合条件的数据即可。
(4) 当n=2时:
<1> 当a>=3且a=2*x+1(a为奇数,x为正整数)时,b=2x2+2x,c=2x2+2x+1。
<2> 当a>4且a=2*x(a为偶数,x为正整数)时,b=x2-1,c=x2+1。
#include<bits/stdc++.h> using namespace std; int main() { int t,n,a,x; cin>>t; while(t--) { scanf("%d%d",&n,&a); if(n==1) printf("%d %d\n",1,a+1); else if(n>2||!n) printf("-1 -1\n"); else { if(a%2==1) { x=(a-1)/2; printf("%d %d\n",2*x*x+2*x,2*x*x+2*x+1); } else if(a%2==0) { x=a/2; printf("%d %d\n",x*x-1,x*x+1); } } } return 0; }