7
votes

Optimisation des algorithmes (factorisation primordiale)

Avant de commencer, laissez-moi dire: ce n'est pas des devoirs, tout simplement, amusant, amusant.

Maintenant, j'essaie de trouver un algorithme qui peut répondre à cette question 1 / x + 1 / y = 1 / n! .

et comme vous pouvez le voir par Le lien ci-dessus, l'auteur ne demanda que des astuces et non la réponse réelle, alors je demanderais bien la même chose.

J'ai simplifié l'expression jusqu'à (x - N!) (Y - N!) (n!) ^ 2 comme suggéré par une des réponses , et à ce moment-là, j'ai compris que le nombre de combinaisons de (x, y) paires est la même que le nombre de diviseurs de N! ^ 2 (corrigez-moi si je me trompe ici).

Donc, comme suggéré par le réponse acceptée , j'essaie d'obtenir la multiplication de tous les facteurs de chaque composition principale N! ^ 2.

i ' VE propose un certain code dans C en utilisant Division d'essai pour factoriser n! ^ 2 et le Tamis des eratosthènes Pour obtenir tous les nombres premiers jusqu'à SQRT (n! ^ 2).

Le problème est maintenant la mémoire, j'ai essayé avec n = 15 et mon Mac (quad core 6 Go de mémoire) est presque mort sur moi. Le problème était la mémoire. J'ai donc ajouté des printf et essayé avec n = 11: xxx

la liste est tous les facteurs premiers de n! ^ 2 (en plus de 1 et n! ^ 2 bien sûr) .

Je voudrais des conseils sur la manière de minimiser la consommation de mémoire et les optimisations possibles.

Code ci-dessous, c'était juste une expérience rapide, donc je suis sûr que cela peut être optimisé. < / p> xxx

EDIT:

Comme exemple, je vous montrerai le calcul pour obtenir toutes les solutions entières positives positives possibles à la version initiale Équation:

3! ^ 2 = 36 = (3 ^ 2 * 2 ^ 2 * 1 ^ 0)

Donc, il y a (1 + 2) (1 + 2) (1 + 0) = 9 solutions entières positives possibles à l'équation de diophantine. Double si vous comptez des entiers négatifs. J'utilise Wolframalpha pour être sûr.

edit 2:

Je pense que je viens de découvrir" Qu'est-ce qu'un factoriel est ", je reçois cette sortie très intéressante: xxx

merci: d


5 commentaires

Vous devez en sortir plus si ce n'est pas des devoirs!


Vous connaissez la factorisation principale de (n!) ² n'est que la factorisation principale de N!, Puis tout carré tout? (et 121 == 11²).


@Edheal je pensais juste que quelqu'un aurait dit que comme j'ai tapé la phrase :)


Pourquoi au nom de Dieu utiliseriez-vous une division de première instance pour factoriser (n!) ^ 2 ??? Facilez simplement chacun des nombres 1 à N.


@woodchips merci pour la pointe mais maintenant je l'ai eu, semble stupide maintenant.


3 Réponses :


11
votes

Le truc ici est de reconnaître exactement ce qu'est un N! est. C'est un produit de tous les numéros de 1 à n . Qui est déjà un énorme pas en avant.

Alors, ce que vous devez faire, c'est d'abord de mieux factoriser chacun des nombres à partir de 1 à n .

Dans ce sens, vous n'avez pas besoin de tamis jusqu'à n! . Au lieu de cela, il suffit de tamettre jusqu'à sqrt (n) . Et le reste consiste à fusionner tous vos principaux facteurs.


3 commentaires

Très intéressant, laissez-moi penser pendant un moment.


Je vous comprends, je n'ai pas besoin de calculer la factorisation primordiale d'une factorielle, je peux simplement le calculer pour chaque membre et concaténer le résultat. Mais j'ai encore besoin de calculer la factorisation principale de N! ^ 2, ce n'est pas la même chose. Je vais mettre à jour un exemple pour vous montrer ce que je veux dire.


Une fois que vous avez les facteurs premiers pour n! , il suffit de multiplier tous les pouvoirs de 2 et vous obtenez n! ^ 2 .



7
votes

Plus facile, vous n'avez pas besoin de prendre en compte les chiffres jusqu'à N. Vous devez simplement compter des facteurs premiers. Et que vous pouvez faire sans vous soucier de quels nombres sont des facteurs.

laissez-moi faire 15 à la main.

jusqu'à 15 Il existe 7 multiples de 2, 3 multiples de 4 et 1 multiple de 8, pour un total de 11 facteurs de 2.

jusqu'à 15 Il y a 5 multiples de 3 et un multiple de 9 pour un total de 6 facteurs de 3.

jusqu'à 15 Il y a 3 multiples de 5, pour un total de 3 facteurs de 5.

jusqu'à 15 Il existe 2 multiples de 7, pour un total de 2 facteurs de 7.

Il y a 1 multiple chacun de 11 et 13.

SO 15! = 2 11 * 3 6 * 5 3 * 7 2 * 11 * 13.


0 commentaires

5
votes

trouver une factorisation primaire de n! Vous devez:

  1. Pour chaque PRIM P sous N: Recherchez S = [N / P] + [N / P 2 ] + [N / P 3 ] + [N / p 4 ] .... ([] - est une partie intégrante d'un argument). Donc, si nous définissons la division dans son ensemble, la formule est la suivante: S = N / P + N / P 2 + N / P 3 + N / P + N / P 4 ....
  2. c'est le nombre de P dans N! Factorisation principale
  3. et oui, si vous avez besoin de factorisez n! ^ 2, comptez simplement la factorisation de N! et doubler les pouvoirs de tous les nombres premiers en conséquence.

8 commentaires

Il est probablement préférable que vous expliquiez que votre notation [n / p] est pour la division entière.


@Willness c'est une norme en mathématiques, n'est-ce pas? Mais merci, vous avez raison.


Tout le monde ne le sait pas, et il est écrit différemment de toute façon (pas présent en ASCII), n'est-ce pas? BTW Integer Division est généralement (parfois?) Écrit A // B .


@Willness au contraire, c'est exact ce que nous avions à l'école et à l'université. Mais tout le monde n'a pas eu une éducation spécialisée en mathématiques. Et les normes de notation mathématiques ne sont pas universelles.


Intéressant. Je ne le savais pas. (Je voulais dire Le support sans la planche supérieure ). :)


@Willness je ne savais pas cela aussi, pendant une longue période et que je l'oublie constamment. Les gens ont tendance à prendre sincèrement leur mini connaissances pour la norme universelle. Et comme pour les mathématiques - prenez les noms des chiffres. Un billion de dollars dans différents pays est un nombre différent.


@Willness c'est la fonction de sol (), pourquoi la planche supérieure? Il a été bourré dans nos têtes par nos professeurs d'école comme une connaissance absolue et la substance ne faisait que le tas d'inventions des auteurs d'écoliers.


Laissez-nous Continuer cette discussion en chat