HDUOJ 6441 Buscar entero

HDUOJ 6441 Buscar entero

Enlace de tema

Descripción del problema

La gente en USSS ama mucho las matemáticas, y hay un famoso problema matemático.

darte dos enteros n, a, debes encontrar 2 enteros b, c tales que an + bn = cna ^ n + b ^ n = c ^ nunanorte+sinorte=Cn .

Entrada

una línea contiene un entero T; (1≤T≤1000000)

las siguientes líneas T contienen dos números enteros n, a; (0≤n≤1000,000,000,3≤a≤40000)

Salida

imprimir dos números enteros b, c si b, c sale; (1≤b, c≤1000,000,000);

si no, imprime dos enteros -1 -1 en su lugar.

Entrada de muestra

1
2 3

Salida de muestra

4 5

Preguntas de pensamiento ~
Primero, de acuerdo con el último teorema de Fermat, cuando n> 2 n> 2norte>Cuando 2 , no debe haber una solución entera positiva ~
cuandon = 0 n = 0norte=En 0 , obviamente no hay solución ~
cuandon = 1 n = 1norte=Cuando 1 , salida1 11 sumaa + 1 a + 1una+1 es suficiente,
cuandon = 2 n = 2norte=A las 2 en punto, tenga en cuenta que el límite del título debe ser un número entero positivo, consideramos paridad, paraaaa es impar,a 2 a ^ 2una2 se puede dividir en2 ∗ 1 a ^ 2 * 1una21 ; aaaa es un número par,a 2 a ^ 2una2 se puede dividir en2 2 ∗ 2 \ frac {a ^ 2} {2} * 22una22. Resuelva una ecuación lineal binaria por separado ~
preste atención al orden de salida, el código de CA es el siguiente:

#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;
}

Supongo que te gusta

Origin blog.csdn.net/qq_43765333/article/details/108670681
Recomendado
Clasificación