4 votes

Obtenir une liste de nombres sans carré

Une façon d'obtenir cela est pour les nombres naturels (1, , n ) nous factorisons chacun d'entre eux et voyons s'ils ont des facteurs premiers répétés, mais cela prendrait beaucoup de temps pour les grandes entreprises. n . Y a-t-il un meilleur moyen d'obtenir les nombres sans carré de 1,.., n ?

0voto

Francesco Turci Points 558

En cherchant un peu sur Google, j'ai trouvé ceci page où un programme J est expliqué. A part la syntaxe complexe, l'algorithme permet de vérifier si un nombre est sans carré ou non :

  • générer une liste de PS à carré parfait,

  • prenez votre nombre N et divisez-le par les nombres de la liste PS

  • s'il n'y a qu'un seul nombre entier dans la liste, alors N est sans carré

Vous pouvez implémenter l'algorithme dans votre langage préféré et l'itérer sur n'importe quel nombre de 1 à n.

0voto

Tom Sirgedas Points 2504

http://www.marmet.org/louis/sqfgap/

Consultez la section "Algorithme de base : le tamis d'Eratosthène", c'est ce qu'a suggéré Armen. La section suivante est "Améliorations de l'algorithme".

De plus, pour info, le Moebius et les nombres sans carré sont liés.

0voto

rihkddd Points 1

J'ai trouvé un meilleur algorithme pour calculer le nombre de nombres sans carré dans un intervalle tel que [n,m]. On peut obtenir des nombres premiers inférieurs à sqrt(m) Nous devrions alors soustraire les multiples du carré de ces nombres premiers, puis ajouter les multiples du produit de chaque paire de nombres premiers inférieurs à m, puis soustraire l'arbre, puis ajouter quatre..... Enfin, nous obtiendrons la réponse. Il est certain que cela fonctionne en O(sqrt(m)) .

0voto

Sanjana Mantri Points 51
import math
def squarefree(n):
    t=round(math.sqrt(n))
    if n<2:
       return True
    if t*t==n:
       return False
    if t<=2:
       return True
    for i in range(2,t):
        if n%(i*i)==0:
           return False
        else:
           return True

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X