HDU - 5974

título de la fuente: Click
significado de las preguntas: Q x + y = a, mcm ( x, y) = b, si hay dos números enteros x, y que sea cierto.
Ver el número de grupos a, b, y poner a prueba una muestra de la no violencia se resuelve, se puede estimar el todo en una fórmula.
lcm (x, y) = x * y / mcd (x, y), proporcionado gcd (x, y) = temp ;
gcd aparente (x / temp, y / temp) = 1; conjunto i = x / temp, j = y / temp;
es i * temp + j * temp = a, i * temp * j = b;
resoluble ecuaciones lineales y i, j son enteros positivos, temp será a, b factor.
Teniendo en cuenta una serie de me quería ir a enumerar un factor.
Debido a que i, j puede en realidad primos entre sí para demostrar i + j * i y j primos entre sí.
I + J = K1
I * J = K2
como GCD (X + Y, X) = GCD (X + Y, Y) = GCD (X, Y) =. 1
(X + Y) / (X * Y) factorización única Teorema (x + y) / (x * y) ya es la fracción más simple, y se han demostrado relativamente primos.
i + j y i * j relativamente primos, por lo gcd (a, b) = gcd (x, y).

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<cstdlib>
#include<istream>
#include<vector>
#include<stack>
#include<map>
#include<algorithm>
#include<queue>
#define MAX_len 50100*4
using namespace std;
typedef long long  ll;
ll gcd(ll a,ll b)
{
    if(!b)
        return a;
    else
        return gcd(b,a%b);
}
int main()
{
    ll a,b,i,j;
    while(scanf("%lld %lld",&a,&b)!=EOF)
    {
        ll temp=gcd(a,b);
        a/=temp;
        b/=temp;
        ll t1=sqrt(a*a-4*b);
        if(t1*t1!=a*a-4*b||(a-t1)%2||(a+t1)%2)
        {
            printf("No Solution\n");
            continue;
        }
        printf("%lld %lld\n",(a-t1)/2*temp,(a+t1)/2*temp);
    }
    return 0;
}

Publicado 72 artículos originales · ganado elogios 19 · vistas 7508

Supongo que te gusta

Origin blog.csdn.net/weixin_43958964/article/details/104143022
Recomendado
Clasificación