HDUOJ 6441 Find Integer

HDUOJ 6441 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 a n + b n = c n a^n+b^n=c^n 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

思维题~
首先根据费马大定理,当 n > 2 n>2 n>2 时,一定无正整数解~
n = 0 n=0 n=0 时,显然无解~
n = 1 n=1 n=1 时,输出 1 1 1 a + 1 a+1 a+1 即可
n = 2 n=2 n=2 时,注意题目限定必须是正整数,我们考虑分奇偶,对 a a a 为奇数, a 2 a^2 a2 可以拆分成 a 2 ∗ 1 a^2*1 a21;对 a a a 为偶数, a 2 a^2 a2 可以拆分成 a 2 2 ∗ 2 \frac{a^2}{2}*2 2a22,分别解一个二元一次方程即可~
注意输出的顺序,AC代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T,n,a;
int main(){
    
    
    scanf("%d",&T);
    while(T--){
    
    
        scanf("%d%d",&n,&a);
        if(n>2||n==0) printf("-1 -1\n");
        else 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);
        }else if(n==1){
    
    
            printf("1 %d\n",a+1);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43765333/article/details/108670681
今日推荐