1828 - Inlocuire 4
De la Universitas MediaWiki
Cerința
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
Se citește de la tastatură numărul n
, iar apoi cele n
elemente ale tabloului.
Date de ieșire
Se vor afișa pe ecran elementele tabloului după transformările cerute, separate prin exact un spațiu.
Restricții și precizări
1 ≤ n ≤ 1000
- elementele tabloului vor fi mai mici decât
1.000.000.000
Exemplul 1
Input:
7
7 18 18 5 14 20 4
Output:
14 10 7 6 6 5 2
Exemplul 2
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
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()