Excel e gli applicativi Microsoft Office Sfida numero 3: numeri primi gemelli

Login Registrati
Stai vedendo 3 articoli - dal 51 a 53 (di 53 totali)
  • Autore
    Articoli
  • #14209 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      Giusto per dare un'idea della bontà dei codici proposti, ecco il resoconto dei miei benchmark su una serie ripetuta cento volte di esecuzione delle routine in gioco. Valori espressi in millisecondi:

      Il codice di Mirko è risultato strepitoso oltre che ben congegnato! Bravissimo!

      #14220 Score: 1 | Risposta

      Mirko
      Partecipante
        2 pts

        Un saluto a tutti, e grazie per le Congratulazioni!!

        Ho trovato in rete un'alternativa simile che ho provato ad utilizzare per elencare i gemelli mediante formula.

        Il codice si può migliorare? Intendo quali suggerimenti si possono utilizzare per evitare il ricalcolo dell'intera Function quando come in questo caso richiede troppo tempo.
        In questa posizione ho utilizzato:
        —————————————————
        Static collMarks As New Collection
        With collMarks
        If .Count = 0 Then
        —————————————————
        Ci sono alternative nella Function quando imposto il parametro: (Rng As Range,

        Non avevo mai utilizzato prima un trucco simile. Quale metodo è preferibile utilizzare come regola.

        Si accettano consigli

        Option Explicit
        
        'Const ToNumber = 10000, Valore modificabile per estensione ricerca
        
        Function PrimiGemelli(Rng As Range, Optional Colonna As Boolean) As Long
          Dim X As Long, Test       As Long
          Const ToNumber            As Long = 10000
          Dim First()               As Byte
          Dim Pos
          Static collMarks          As New Collection
          With collMarks
            If .Count = 0 Then
              First = ChrW(1) & ChrW(257) & String(ToNumber / 2, ChrW(256))
              Test = 3
              Do While Test <= ToNumber
                For X = 2 * Test To ToNumber Step Test
                  First(X) = 0
                Next
                Test = Test + 1 - (Test > 2)
              Loop
              Test = 0
              For X = 1 To ToNumber
                If First(X) = 1 Then
                  If Test + 2 = X Then
                    .Add X
                  End If
                  Test = X
                End If
              Next
            End If
            ReDim Pos(1 To .Count, 1 To 1)
            For X = 1 To .Count - 1
                Pos(X, 1) = .Item(X + 1) - 2
            Next
          End With
          If Rng.Rows.Count < UBound(Pos, 1) Then
            PrimiGemelli = Pos(Rng.Rows.Count, 1) - Colonna * 2
          Else
            PrimiGemelli = 0
          End If
        End Function
        
        Allegati:
        You must be logged in to view attached files.
        #14224 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          Inarrestabile ormai   

        Login Registrati
        Stai vedendo 3 articoli - dal 51 a 53 (di 53 totali)
        Rispondi a: Sfida numero 3: numeri primi gemelli
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni: