1828 - Inlocuire 4
Cerința[edit | edit source]
Pentru un număr natural x
mai mare decât 1
numim redusul lui x
cel mai mic număr natural care are exact aceiași divizori primi ca și x
.
Se dă un tablou cu n
elemente, numere naturale mai mari decât 1
. Să se înlocuiască fiecare element din tablou cu redusul său și apoi să afișeze elementele din tabloului ordonate descrescător.
Se vor defini și apela următoarele subprograme:
citire
, care citește de la tastatură valoarea luin
și celen
elemente ale tablouluiafisare
, care afișează pe ecran elementele tabloului, separate prin exact un spațiuredus
, care determină pentru un număr dat redusul săusortare
, care sortează descrescător un tablouinloc
, care realizează înlocuirile cerute.
Date de intrare[edit | edit source]
Se citește de la tastatură numărul n
, iar apoi cele n
elemente ale tabloului.
Date de ieșire[edit | edit source]
Se vor afișa pe ecran elementele tabloului după transformările cerute, separate prin exact un spațiu.
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 1000
- elementele tabloului vor fi mai mici decât
1.000.000.000
Exemplul 1[edit | edit source]
Input:
7
7 18 18 5 14 20 4
Output:
14 10 7 6 6 5 2
Exemplul 2[edit | edit source]
Input:
0
7 18 18 5 14 20 4
Output:
Restricții neîndeplinite pentru n. Introduceți un număr între 1 și 1000.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def validate_input_restrictions(n, tablou):
if not 1 <= n <= 1000: print("Restricții neîndeplinite pentru n. Introduceți un număr între 1 și 1000.") return False if any(x <= 1 or x >= 1000000000 for x in tablou): print("Elementele tabloului trebuie să fie mai mari decât 1 și mai mici decât 1.000.000.000.") return False return True
def citire():
n = int(input("Introduceți numărul n=")) print("Introduceți elemente vector") vector = list(map(int, input().split())) return n,vector
def afisare(vector):
for i in vector: print(i, end=" ") print()
def sortare_descrescatoare(tablou):
return sorted(tablou, reverse=True)
def factorizare_in_divizori_primi(x):
divizori_primi = [] divizor = 2 while divizor <= x: if x % divizor == 0: divizori_primi.append(divizor) while x % divizor == 0: x //= divizor divizor += 1 if x > 1: divizori_primi.append(x) return divizori_primi
def redus(x):
a=1 tab=factorizare_in_divizori_primi(x) for i in tab: a*=i return a
def inloc(vector):
for i in range(len(vector)): aux=redus(vector[i]) vector[i]=aux return vector
def main():
n, tablou = citire() if not validate_input_restrictions(n, tablou): return tablou=inloc(tablou) tablou=sortare_descrescatoare(tablou) afisare(tablou)
if __name__ == "__main__":
main()
</syntaxhighlight>