Les Snippets

Connexion

Test Nombre Premier

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 15/12/2007 21:30:13 et initié par us_30 [Liste]
Vue : 2834
Catégorie(s) : Maths
Langages dispo pour ce code :
- VB6, VBA
- Java



Langage : VB6 , VBA
Date ajout : 15/12/2007
Posté par us_30 [Liste]
Function isNP(Nb As Double) As Boolean
' TEST SI NB EST UN NOMBRE PREMIER ( ALGO RAPIDE )
' utilise ERATHOSENE et DIVISIONS
' Test de validité
If Nb < 2 Then Exit Function

' Paramères
Dim Liste As Long, Saut As Long, t As Long
Dim A As Long, A1 As Long, A2 As Long
Dim Nbp() As Boolean, L() As Long
Dim Pi_NbP As Long, bs As Double, Pi_Nbp2 As Long
Dim Prod As Double
' Paramètres d'optimisation
Pi_NbP = 5   'indice de 0 à 5
Prod = 30030 'produit de 2*3*5*7*11*13

' ALGO ERATHOSTENE : Génére liste nb premier jusqu'à pi(A+1)
A = Prod + 1
A1 = Int((A ^ 0.5 - 3) / 2)
A2 = Int((A - 3) / 2)
ReDim Nbp(A2)
For Liste = 0 To A1
    If Nbp(Liste) = False Then
    Saut = 2 * Liste + 3
    For t = (Saut ^ 2 - 3) / 2 To A2 Step Saut
        Nbp(t) = True 'pas premier
    Next t
    End If
Next Liste

' Forme la liste
ReDim L(A2 + 1)
L(0) = 2
Pi_Nbp2 = 0
For t = 0 To A2
If Nbp(t) = False Then
    Pi_Nbp2 = Pi_Nbp2 + 1
    L(Pi_Nbp2) = 2 * t + 3
End If
Next t
  
' Test si trivial
If Nb > Prod Then GoTo suite 'évite si pas nécessaire
For t = 0 To Pi_Nbp2
    If Nb = L(t) Then isNP = True: Exit Function
Next t
suite:
' Test si multiple
For t = 0 To Pi_Nbp2
    If Nb = L(t) * Int(Nb / L(t)) Then Exit Function
Next t
' Forme liste complète
Dim nbp2 As Long
ReDim L2(5627)
For t = Pi_NbP + 1 To Pi_Nbp2
    nbp2 = nbp2 + 1
     L2(nbp2) = L(t)
Next t
' On rajoute les multiples
Dim t2 As Long
For t = Pi_NbP + 1 To Pi_Nbp2
If L(t) * L(t) > A Then Exit For
    For t2 = t To Pi_Nbp2
    If L(t) * L(t2) < A Then
        nbp2 = nbp2 + 1
        L2(nbp2) = L(t) * L(t2)
    Else
        Exit For
    End If
    Next t2
Next t
' ALGO DIVISIONS
Dim fin As Long, m As Long
fin = Sqr(Nb)
For m = 0 To fin Step Prod
    For t = 1 To nbp2
    If Nb = (m + L2(t)) * Int(Nb / (m + L2(t))) Then Exit Function
    Next t
Next m
isNP = True
End Function
Remarque :
Test: isNP(999999999989) => VRAI.
Langage : Java
Date ajout : 10/02/2008
Posté par vincjava [Liste]
public static boolean isNP(int a) {
    a = Math.abs(a);                            // si l'utilisateur non averti rentre un nombre négatif
    if (a < 2) return false;                 // 1 et 0 ne sont pas premiers
    if(a%2==0) return false;              // Si le reste de la division euclidienne de a par 2 est 0
                                                          // soit a divisible par 2

    int b = new Double(Math.sqrt(a)).intValue();    // on effectue les calculs jusqu'à la partie entière 
                                                                               // de la racine carré du nombre
    
    for(int i = 3;i<=b;i = i+2) {
        if(a%i == 0) return false;
    }
    
    return true;
    
}
public static void main(String[ ] args) { System.out.println(isNP(99999989)); }

Snippets en rapport avec : Nombre, Premier, Erathostène



Codes sources en rapport avec : Nombre, Premier, Erathostène

{Visual Basic, VB6, VB.NET, VB 2005} NOMBRES PREMIERS
L'utilisateur entre un nombre entier positif au clavier et appuie sur Entrée ou clique sur OK pour s...

{Visual Basic, VB6, VB.NET, VB 2005} TROUVER DES NOMBRES PREMIERS
Ceci est un programme tout simple qui permet de trouver des nombres premiers entre X et Y. Le temps...

{PHP} NOMBRE_PREMIER
Un petit programme qui liste des nombres premiers jusqu'a $limit limite...

{Visual Basic, VB6, VB.NET, VB 2005} NOMBRE PREMIER AUTRE METHODE
voila encore un nouveau prog sur les nombres premiers. mais la methode différe , il me semble de l'...

{Delphi} RECHERCHER LES PREMIERS NOMBRES PREMIERS
Tout est dans le titre ce petit programme permet de chercher beaucoup de nombre premier. On part de ...

{Visual Basic, VB6, VB.NET, VB 2005} FACTORISATION EN NOMBRES PREMIERS
Programme permettant de factoriser des nombres composés jusqu'à 100000. J'ai voulu faire plus grand ...

{Visual Basic, VB6, VB.NET, VB 2005} UN PETIT PROGRAMME DE CALCUL DES NOMBRE PREMIERS
qu'on vous appuiez sur calculer il va mettre les nombre dans un fichier texte dans C: appeler premie...

{Visual Basic, VB6, VB.NET, VB 2005} CRIBLE D' ERATOSTHÈNE
Petit programme donnant la liste des NP en utilisant l'algorithme du crible d'Eratosthène. A vos com...

{C / C++ / C++.NET} UN MICROSCOPE NUMÉRIQUE POUR REGARDER LES NOMBRES DANS TOUTES LES BASES.
L’euclidoscope est un programme permettant de visualiser sur une seule figure toutes les fractions k...

{C / C++ / C++.NET} SPIRALE D'ULAM (WIN32)
Représentation sous forme de spirale des nombres premiers. On peut aller jusqu'a 10000 seulement, ma...