HDU-2018中国大学生程序设计竞赛-网络选拔赛-1004-Find Integer

 Find IntegerTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0
Special Judge


Problem Descriptionpeople 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.  Inputone line contains one integer T;(1T1000000)

next T lines contains two integers n,a;(0n1000,000,000,3a40000)
  Outputprint two integers b,c if b,c exits;(1b,c1000,000,000);

else print two integers -1 -1 instead.
  Sample Input1 2 3  Sample Output4 5 提示:此题运用了费马大定理,如果n>2,不可能出现b、c对应a实现a^n+b^n=c^n;   如果n==2,则有当a为奇数时有规律,当a为偶数时有规律;   如果n==1,情况更好判断。 代码实现如下(g++):
#include <iostream>
#include <cstdio>
#define ll long long int

using namespace std;

int main()
{
    int t;
    ll z;
    ll n,a;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld %lld",&n,&a);
        if(n==1)
        {
            printf("1 %lldn",a+1);
        }
        else if(n==2)
        {
            z=a*a;
            if(a%2)
            {
                printf("%lld %lldn",z/2,z/2+1);
            }
            else
            {
                z = z/4;
                printf("%lld %lldn",z-1,z+1);
            }
        }
        else
            printf("-1 -1n");
    }
    return 0;
}

 

相关内容推荐