Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1453 Accepted Submission(s): 479 Special Judge 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 Source 2018中国大学生程序设计竞赛 - 网络选拔赛 Recommend chendu | We have carefully selected several similar problems for you: 6447 6446 6445 6444 6443 其中涉及到的主要知识就是费马大定理,和一些求勾股数的公式; #include <iostream>
using namespace std;
typedef unsigned long long int LL;
int main()
{
int t;
LL a, n;
LL b, c;
scanf("%d", &t);
while (t--) {
scanf("%lld%lld", &n, &a);
if (n > 2) {//费马大定理
printf("-1 -1\n");
continue;
}
else if (n == 2) {
if (a % 2 == 1) {//如果为奇数
LL k;
k= (a - 1) / 2; /* k,b,c都是套的求勾股数的公式*/
b = 2 * k*k + 2 * k;
c = 2*k*k+2*k+1;
printf("%lld %lld\n", b, c);
continue;
}
else {//如果为偶数
LL k;
k = a / 2; /*同理,也是套公式*/
b = k * k - 1;
c = k * k + 1;
printf("%lld %lld\n", b, c);
continue;
}
}
else if(n==1){
cout << 1 << ' ' << a + 1 << endl;
continue;
}
else {//当n等于0的时候
cout << "-1 -1" << endl;
continue;
}
}
return 0;
}
|