1858 - Rest Mare

From Bitnami 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

<syntaxhighlight lang="python" line>

  1. 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))


</syntaxhighlight>

Explicație rezolvare