ACM 2018CCPC网络赛 Find Integer

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}

Input

one line contains one integer T;(1 \le T\le1000000)

next T lines contains two integers n,a;(0 \le n \le1000,000,000,3 \le a \le 40000)

Output

print two integers b,c if b,c exits;(1 \le b,c \le 1000,000,000);

else print two integers -1 -1 instead.

Sample Input

1
2 3

Sample Output

4 5
题意
输出符合公式 an+bn=c^n 的一对 b 和 c ;
T n a b c 各自的取值范围:
(1≤T≤1000000)
(0≤n≤1000,000,000,3≤a≤40000)
(1≤b,c≤1000,000,000)

思路
当n0时显然不能1+1=1;
当n
1时符合a+b=c,显然b=1,c=a+1;
当n>2时由费马大定理可知
给出链接->费马大定理
n>=3一定无解(数学很重要)
当n==2时,就是勾股定理了
{ 3,4,5
6 ,8 ,10
5 ,12 ,13
… … …
}


 #include <iostream>
 #include <cstdio>
 using namespace std;

 int main() {
   long long a, b, c;
   int t;
   cin >> t;
   long long n;
   while(t--){
       scanf("%lld%lld", &n, &a);
        if(n == 0){
             printf("-1 -1\n");
         }
         else if(n == 1){
        	  printf("1 %lld\n", a+1);
          }
          else if(n > 2){
         	  printf("-1 -1\n");
          }
          else{
           	  long long mul = a*a;
           if(mul & 1){
                printf("%lld %lld\n", (mul-1)/2, (mul+1)/2);
            }
            else{
                b = (mul-4)/4;
                c = b+2;
                printf("%lld %lld\n", b, c);
            }
        }
    }
    return 0; 
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值