1858 - Rest Mare

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

Pentru un număr natural m numim rest mare cel mai mare rest pe care îl obţinem împărţind numărul m la toate numerele naturale de la 1 la m. Fiind dat un număr natural n, se determină pentru fiecare număr de la 1 la n numărul rest mare, iar aceste resturi mari se însumează. Se cere aflarea acestei sume.

Date de intrare

Programul citește de la tastatură numărul t ce poate fi 1 sau 2. Dacă t este 1 se vor citi trei numere n, c1, c2 cu semnificația din enunț. Dacă t este 2 se vor citi patru numere n, c1, c2, c3 cu semnificația din enunț.

Date de ieșire

Programul va afișa pe ecran numărul ct, reprezentând numărul cerut.

Restricţii şi precizări

  • t poate fi 1 sau 2
  • 1 ⩽ n ⩽ 1.000.000.000
  • 2 ⩽ c1, c2, c3 ⩽ 9
  • oricare două cifre sunt prime intre ele

Exemplul 1

Intrare
Introduceți cerința:

1

Introduceți numărul total:

10

Introduceți a:

2

Introduceți b:

3

Ieșire
Rezultatul este: 3


Exemplul 2

Intrare
Introduceți cerința:

2

Introduceți numărul total:

10

Introduceți a:

3

Introduceți b:

5

Introduceți c:

7

Ieșire
Rezultatul este: 4


Rezolvare

#1858
def calculeaza_restmare(n):
    k = n // 2
    if n % 2 == 1:
        return k * k
    else:
        return k * (k - 1)


def validate(n):
    if n < 1 or n > 2000000000:
       print("Valoarea citita nu se incadreaza in intervalul permis.")
       exit()


if __name__ == '__main__':
    with open("restmare.in") as f:
        n = int(f.readline().strip())
        validate(n)

    rezultat = calculeaza_restmare(n)

    with open("restmare.out", "w") as f:
        f.write(str(rezultat))

Explicație rezolvare