[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].