2013-02-25 2 views
1

Je veux représenter un nombre comme le produit de ses facteurs.Le nombre de facteurs qui sont utilisés pour représenter le nombre devrait être de 2 au nombre de facteurs premiers du même nombre (c'est le nombre maximum possible de facteurs pour un nombre).représentation d'un nombre comme multiplication de ses facteurs

prenant par exemple le numéro 24:

représentation

du nombre que deux facteurs de multiplication sont 2*12, 8*3, 6*4 et ainsi de suite ...,

représentation

du nombre que trois facteurs de multiplication sont 2*2*6 , 2*3*4 et ainsi de suite ...,

la représentation du nombre comme multiplication par quatre facteurs (facteurs premiers uniquement) est 2*2*2*3.

s'il vous plaît aidez-moi à quelques simples et un algorithme générique pour ce

+1

Donc, étant donné 24, que cette fonction hypothétique devrait revenir? [2,12]? [8,3]? [3,8]? - De plus, je pense que vous obtiendrez beaucoup plus de réponses sur une question comme celle-ci si vous essayez quelque chose, puis revenez avec une question spécifique si cela ne fonctionne pas. – mgilson

+0

jeter un coup d'oeil [ici] (http://stackoverflow.com/questions/6800193/what-is-the-most-efficient-way-of-finding-all-the-factors-of-a-number-in- python).Cela vous donnera les facteurs. Ensuite, il vous suffit de les manipuler. – will

Répondre

0

Je connais un ...

Si vous utilisez python, vous pouvez utiliser ce dictionnaire pour simplifier le stockage ...

Vous devrez vérifier chaque prime inférieure à la racine carrée du nombre. Maintenant, supposons que p^k divise votre nombre n, votre tâche, je suppose, est de trouver k. Voici la méthode:

int c = 0; int temp = n; while (temp! = 0) {temp/= p; c + = temp; }

Ce qui précède est un code C++, mais vous aurez l'idée ... A la fin de cette boucle, vous aurez c = k

Et oui, le lien donné par testament est une implémentation parfaite en python du même algorithme

0

Voici une fonction qui retourne tous les facteurs d'un nombre donné, n. Notez qu'il retourne chaque facteur, pas une paire spécifique.

def factors(n): 
    """Finds all the factors of 'n'""" 
    fList, num, y, limit = [], n, 0, int(sqrt(n)) + 1 
    for factor in range(1, limit): 
     if n % factor == 0: 
      if factor not in fList: fList.append(factor) 
      y = n/factor 
      if y not in fList: fList.append(y) 
    return sorted(fList) 

Par exemple, :

>>> factors(24) 
[1, 2, 3, 4, 6, 8, 12, 24] 
2

Cela va générer tous les ensembles de facteurs qui se multiplient pour donner le numéro d'origine. Il renvoie tous les ensembles de produits sous la forme d'une liste unique de tuples triés.

Les 1 s sont exclus, pour éviter une récursion infinie.

def prime_factors(n):  
    return set(reduce(list.__add__, ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0))) 

def product_sets(n): 
    return set(products(1, [], n, prime_factors(n))) 



def products(current_product, current_list, aim, factors): 

    if current_product == aim: 
     yield tuple(sorted(current_list)) 

    elif 0 < current_product < aim: 
     for factor in factors: 
      if factor != 1: 
       for product in products(current_product * factor, current_list + [factor], aim, factors): 
        yield product 


print list(product_sets(24)) 

Sortie:

[(4, 6), (3, 8), (2, 12), (2, 3, 4), (24,), (2, 2, 6), (2, 2, 2, 3)] 
+0

Merci beaucoup .. cela m'a beaucoup aidé – user2095966

+0

@ user2095966 - peut-être que vous pourriez le marquer comme la bonne réponse? – will

Questions connexes