SEI

Andiamo sul tosto

I numeri pentagonali sono generati dalla formula, P(n) = n (3n-1) / 2. I primi dieci numeri pentagonali sono i seguenti:

1, 5, 12, 22, 35, 51, 70, 92, 117, 145, …

Si può notare che P(4) +  P(7) = 22 + 70 = 92 = P(8). Tuttavia, la loro differenza, 70 – 22 =48, non è pentagonale.

Trova la coppia di numeri pentagonali, P(j) e P(k), tali che la loro somma e la loro differenza siano pentagonali e D = | Pk – Pj | sia minimo, qual’è il valore di D?

 

p.s.

una soluzione originale = 2 crediti

Advertisements
Questa voce è stata pubblicata in Algoritmi, Aritmetica, Informatica, Matematica, Programmazione e contrassegnata con , , , , , , , , . Contrassegna il permalink.

16 risposte a SEI

  1. edoardobastianetto ha detto:

    7042750 1560090 ??

      • edoardobastianetto ha detto:

        Option Explicit

        Private Sub Form_Load()

        Dim i As Double
        Dim j As Double

        For i = 2 To 3000
        For j = 1 To i – 1
        If is_P(P(i) + P(j)) Then
        If is_P(P(i) – P(j)) Then
        MsgBox P(i) & ” ” & P(j)
        Exit For
        End If
        End If
        Next j
        Next i

        End Sub

        Function P(n As Double) As Double
        P = n * (3 * n – 1) / 2
        End Function

        Function is_P(n As Double) As Boolean
        is_P = False
        If (Sqr(24 * n + 1) + 1) / 6 = Int((Sqr(24 * n + 1) + 1) / 6) Then is_P = True ‘va presto in overflow
        End Function

        Function NdiP(n As Double) As Double
        NdiP = (Sqr(24 * n + 1) + 1) / 6
        End Function

  2. Filippo Bisconcin ha detto:

    a me risultano 2955 e 2967
    la somma è 9922 (cioè penatgonale)
    e la differenza idem

  3. edoardobastianetto ha detto:

    stavo provando a farlo cosi..

    Option Explicit

    Private Sub Form_Load()

    Dim i As Double
    Dim n As Double

    For i = 1 To 10000
    n = 1 + 3 * i
    If is_P(n) Then ‘primo candidato
    Testo.Text = Testo.Text & n & “-” & P(i) & ” ” ‘stampa i due candidati
    If is_P(P(i) – n) Then Testo.Text = n & P(i) & ” ” ‘dovrebbe stampare la coppia vincente
    End If
    Next i

    End Sub

    Function P(n As Double) As Double
    P = n * (3 * n – 1) / 2
    End Function

    Function is_P(n As Double) As Boolean
    is_P = False
    If (Sqr(24 * n + 1) + 1) / 6 = Int((Sqr(24 * n + 1) + 1) / 6) Then is_P = True ‘va presto in overflow
    ‘ per valori maggiori usare:
    ‘ Dim j As Double
    ‘ For j = 1 To 10000
    ‘ If n = P(j) Then
    ‘ is_P = True
    ‘ Exit For
    ‘ End If
    ‘ If n < P(j) Then
    ' Exit For
    ' End If
    '
    ' Next j
    End Function

    Function NdiP(n As Double) As Double
    NdiP = (Sqr(24 * n + 1) + 1) / 6
    End Function

  4. edoardobastianetto ha detto:

    Avevo pensato di generare le differenze dei numeri pentagonali cioè 4,7,10,13 (con la formula 1+3*i) e prendere quelle che sono Pentagonali, quindi quando arrivo al 22 la funzione “is_P” restituisce true, quindi so che 22 è il primo numero Pentagonale mentre il secondo è P(i)..
    per aver fatto 22 i deve essere stato 7 quindi calcolo P(7) e ho 70, faccio la differenza e controllo se è pentagonale in questo caso gli ho trovati, facendo cosi ottengo questi candidati:
    22-70 70-782 145-3432 247-10045 376-23375 532-46905 715-84847 925-142142.. ; ma quando faccio la differenza distano sempre 3 dal prossimo numero pentagonale es
    P(7) = 70 P(23) = 782
    P(7)+P(23) = 852 ok
    ma P(23)-P(7)=712 mentre il numero pentagonale prossimo è 715, sempre sempre 3 la distanza quindi non dovrebbe esistere questa coppia.. dove sbaglio?

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...