Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.38 KB | None | 0 0
  1. # Fonctions et variables globales ---------------------------------------------
  2. def nombrePremiers(a):
  3.     lst=[2,3]
  4.     x = lst[len(lst)-1]
  5.     i=1#on commence a partir de 3
  6.     while lst[i]<=a:#tant que le dernier nombre de la liste est inferieur ou egal au nombre demandé
  7.         x+=2#futur candidat à être un nombre impair
  8.         k=1
  9.         while x%lst[k]!=0:#on teste si le candidat est divisible par les nombre premiers precedent
  10.             k+=1#pour passer au nombre premier suivant
  11.             if k==len(lst) or lst[k]**2>x:#si k à fait toute la liste ou que un elem de la liste **2 est superieur au candidat
  12.                 lst.append(x)#on ajoute le candidat à la liste
  13.                 i+=1#on se place sur ce nombre pour la suite
  14.                 break
  15.     return lst
  16.  
  17.  #Fonction prenant en argument un entier x à réduire selon p entier premier
  18.  #Retourne x le reste de la division successive par p ainsi que e l'exposant
  19. def expoFacteur(x,p):
  20.     e=0
  21.     while x%p==0:
  22.         x//=p
  23.         e+=1
  24.     return x,e
  25.        
  26. def decompose():
  27.     liste,fac,exp=[],[],[]
  28.     while True:#demande des nombres a ajouter a la liste
  29.         entree= input("Entier ou stop")
  30.         if entree=="stop":
  31.             break
  32.         liste.append(int(entree))#on ajoute les nombres à la liste
  33.     prems=[2,3]
  34.     for x in liste:#prend les valeurs de la liste position par position
  35.         r=x
  36.         p=2
  37.         facx=[]
  38.         expx=[]
  39.         i=0
  40.         while r!=1:#tant que le nombre de la liste n'est pas egale a 1
  41.             r,e=expoFacteur(r,p)#cf au dessus
  42.             if e!=0:#si l'exposant != 0
  43.                 facx.append(p)
  44.                 expx.append(e)
  45.             i+=1
  46.             if i==len(prems):
  47.                 prems=premierSuivant(prems)
  48.             p = prems[i]
  49.             if r==x and p**2>x:
  50.                 break
  51.         fac.append(facx)
  52.         exp.append(expx)
  53.         print(x," = ",end='')
  54.         formateDecomp(facx,expx)
  55.     print("Nombres premiers utilisé",prems)
  56.  
  57.  #Formate et affiche la décomposition d'un nombre en facteurs premiers
  58.  #fac : tableau contenant les facteurs du nombre à décomposer
  59.  #exp : exposant des facteurs du nombre a décomposer
  60. def formateDecomp(fac,exp):
  61.     if fac==[]:#si il n'y a pas de nombre dans la liste le nombre est premier
  62.         print("est premier")
  63.     else:
  64.         for i in range(len(fac)-1):#genere l'affichage jusqu'à l'avant dernier facteur
  65.             print(fac[i],'^',exp[i],'*',end=' ')
  66.         print(fac[len(fac)-1],'^',exp[len(fac)-1])#rajoute la partie manquante de l'affichage(sous idle '\b' indispo)
  67.  
  68.  #Fonction prenant en argument un tableau contenant les n premiers entiers premiers
  69.  #Retourne un tableau contenant les n+1 premiers entiers premiers
  70. def premierSuivant(prems):
  71.     x = prems[len(prems)-1] # point de départ : le dernier premier connu
  72.     while True:
  73.         x+=2 # On test les entiers impairs uniquement
  74.         k=1
  75.         while x%prems[k]!=0: # tant que le candidat x n'est pas divisible par un nombre premier il peux encore etre premier
  76.             k+=1
  77.             #si on a testé tout les nombres premiers ou que les nombres premiers restant
  78.             # ne peuvent pas etre le plus petit divisuer du candidat alors x est premier
  79.             if k==len(prems) or prems[k]**2>x:
  80.                 prems.append(x)
  81.                 return prems
  82.  
  83. if __name__ == '__main__':
  84.     decompose()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement