[MatLab]

grillo370
Salve a tutti dovrei svolgere questo esercizio ma non so come fare, non ho mai usato matlab/octave ed ho solo una sorta di guida sui comandi:
Si scriva una funzione Octave denominata Verifica che, dati due vettori di interi V e W ed un intero k,
restituisca il numero di elementi in V che siano numeri primi e per i quali il vettore W contenga almeno k multipli.

Ad esempio, per V={12, 13, 8, 24, 3}, W=[34, 39, 26, 6] e k=2,
la funzione Verifica restituisce 2, poiché gli elementi primi che compaiono nel vettore V
hanno almeno k=2 multipli nel vettore W (in maggior dettaglio, i k multipli sono {39, 26} per
l’elemento 13 e {6, 39} per l’elemento 3).

Risposte
dan952
Ciao, provo a risponderti... costruisci due funzioni [nota]Forse esistono già su matlab, controlla...[/nota]

Prime(n)
Div(n,m)


La prima restituisce 1 se n e primo 0 altrimenti, la seconda restituisce 1 se n divide m e 0 altrimenti

function[N]=verifica[V,W,k]
         N=0;
          LV=length(V);
          LW=length(W);
          For i=1:LV 
               If prime(V(i))==1
                    Cont=0;
                    For j=1:LW 
                          If div(V(i),W(j))==1
                                 cont++;
                           end
                    end
                           If cont>k-1
                                  N++;
                            end

                       
                   end
            end
Return
                                         



grillo370
Potresti spiegarmelo passo passo come è stato costruito?

dan952
Controllando su internet esistono due funzioni isprime e isdivisible in matlab che fanno quello che fa prime e div... detto questo andiamo al codice

La prima riga inializza N, la seconda e la terza prendono in memoria le lunghezze dei due vettori V e W per evitare di ricalcorarle sempre

Il primo for scorre il vettore V e quando trova un primo

if isprime(V(i))==1 


Scorre il vettore W per vedere se questo primo divide una delle componenti di W e cont conta quanti multipli ha V(i) in W e se questi sono più di k-1 allora N aumenta di uno

Cont=0;
for j=1:LW 
       If isdivisible(V(i),W(j))==1
           Cont++;
        end
End
         if cont>k-1
             N++;
         End
End
 

grillo370
Non trovo isdivisible su octave, mi dice che non esiste. Chissà ha qualche altro nome?

Raptorista1
Prova [inline]mod(a,b) == 0[/inline] al posto di [inline]isdivisible(a,b) == 1[/inline].

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.