1011 - p3factoriale

De la Universitas MediaWiki
Versiunea din 4 iunie 2024 08:34, autor: Danciu (discuție | contribuții) (Pagină nouă: = Cerința = Se dau <code>a</code>, <code>b</code>, <code>c</code> și <code>p</code> numere naturale, astfel încât <code>a ≥ b + c</code> și <code>p</code> număr prim. Să se afle dacă numărul  este divizibil cu <code>p</code>, și să se afle exponentul lui <code>p</code> în descompunerea în factori primi a acestui număr. = Date de intrare = Programul citește de la tastatură numerele <code>a</code>, <code>b</code>, <code>c</code> și <code>p</code>, separate...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

Se dau a, b, c și p numere naturale, astfel încât a ≥ b + c și p număr prim. Să se afle dacă numărul  este divizibil cu p, și să se afle exponentul lui p în descompunerea în factori primi a acestui număr.

Date de intrare

Programul citește de la tastatură numerele a, b, c și p, separate prin spații.

Date de ieșire

Programul va afișa pe ecran numărul e, reprezentând exponentul lui p în descompunerea în factori primi a numărului natural . Dacă numărul nu este divizibil cu p, atunci se va afișa 0.

Restricții și precizări

  • 1 ≤ a , b , c ≤ 1.000.000.000
  • a ≥ b + c
  • 2 ≤ p ≤ 1.000

Exemplu:

Intrare

12 4 5 3

Ieșire

3

Explicație

Știm de la matematică faptul că numărul  este natural, deci putem vorbi despre divizibilitatea lui prin p ( Numărul  reprezintă combinări de  elemente luate câte  ).

De asemenea se știe că exponentul numărului prim p în descompunerea în factori primi a numărului a! este , unde prin  am notat partea întreagă a lui .

În exemplul dat avem , deci exponentul este 3.

Rezolvare

def count_p_in_factorial(n, p):
    exponent = 0
    while n % p == 0:
        n //= p
        exponent += 1
    return exponent

def is_divisible_by_p(a, b, c, p):
    exponent_a = count_p_in_factorial(a, p)
    exponent_b = count_p_in_factorial(b, p)
    exponent_c = count_p_in_factorial(c, p)

    if exponent_a - exponent_b - exponent_c < 0:
        return 0

    exponent = exponent_a - exponent_b - exponent_c
    return exponent

def main():
    a, b, c, p = map(int, input().split())

    if a >= b + c:
        exponent = is_divisible_by_p(a, b, c, p)
        print(exponent)
    else:
        print("0")

if __name__ == "__main__":
    main()