D - Find Integer

思路

  • 利用费马大定理, 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=(a21)/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/41,c=a2/4+1

代码

#include 
#include 
#include 
#include  
#include 
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");
    }
}

你可能感兴趣的:(D - Find Integer)