[MatLab]
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).
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
Ciao, provo a risponderti... costruisci due funzioni [nota]Forse esistono già su matlab, controlla...[/nota]
La prima restituisce 1 se n e primo 0 altrimenti, la seconda restituisce 1 se n divide m e 0 altrimenti
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
Potresti spiegarmelo passo passo come è stato costruito?
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
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
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
Non trovo isdivisible su octave, mi dice che non esiste. Chissà ha qualche altro nome?
Prova [inline]mod(a,b) == 0[/inline] al posto di [inline]isdivisible(a,b) == 1[/inline].