# En este archivo hay varios ejemplos. # Cada ejemplo correponderia a un archivo. # Los ejemplos, o lo que es lo mismo, los archivos, estan # separados por #=========================================================== #=========================================================== #!/usr/bin/python # ej021.py # divisores y factores primos de un entero mayor o igual a 2 n = input('\n\nDigite n entero mayor o igual a 2 : ') if n < 2 : print '\n\nn deber ser mayor o igual a 2.\n\n' quit() import math m = int(math.sqrt(n)) d = [1] for i in range(2, n/2+1) : if n%i == 0: d.append(i) d.append(n) print '\nLos divisores de ', n, ' son: ', d, '\n' # factores primos, version sencilla aunque un poco ineficiente f = [] t = n otroFactor = True while otroFactor : t2 = int( math.sqrt(t) ) ii = range(2, t2+1) otroFactor = False for i in ii: if t%i == 0: f.append(i) t = t/i #print 'i = ', i, ' nuevo t', t otroFactor = True break f.append(t) print '\nLos factores primos de ', n, ' son: ', f, '\n' # version un poco mas eficiente f = [] t = n i = 2 while i <= math.sqrt(t): fin_i = 0 while fin_i == 0: if t%i == 0: f.append(i) t = t/i else : fin_i = 1 i = i+1 if t > 1 : f.append(t) print '\nLos factores primos de ', n, ' son: ', f, '\n' # otro poquito mejor # construccion de los primos hasta sqrt(n) p = [] i = 2 m = int(math.sqrt(n)) print 'm = ', m while i <= m : # i es primo? #print 'i= ', i esprimo = True ri = int(math.sqrt(i)) for j in p: #print 'j= ', j if j*j > i: break if i%j == 0: esprimo = False break if esprimo : p.append(i) #print 'nuevo p: ', p i += 1 print 'primos hasta ', m, ' : ', p f = [] t = n for i in p: fin_i = 0 while fin_i == 0: if t%i == 0: f.append(i) t = t/i else : fin_i = 1 if t > 1 : f.append(t) print '\nLos factores primos de ', n, ' son: ', f, '\n' #=========================================================== #===========================================================