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

Voto per la Sfida n. 3

Scegli a chi dare il tuo voto per questa sfida:

  • scossa33.33%2 votes
  • vecchio frac0%0 votes
  • Marius440%0 votes
  • Mirko66.67%4 votes
  • albatros540%0 votes
  • Luca730%0 votes
LoginRegistrati
Stai vedendo 3 articoli - dal 51 a 53 (di 53 totali)
  • Autore
    Articoli
  • #14209 Risposta

    vecchio frac
    Senior Moderator
      171 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 Risposta

      Mirko
      Partecipante
        1 pt

        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 Risposta

        vecchio frac
        Senior Moderator
          171 pts

          Inarrestabile ormai   

        LoginRegistrati
        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:



        vecchio frac - 2750 risposte

        patel
        patel - 1089 risposte

        albatros54
        albatros54 - 1062 risposte

        Marius44
        Marius44 - 1000 risposte

        Luca73
        Luca73 - 798 risposte