Riscrivo il messaggio lasciato prima con le correzioni, grazie per le dritte:
Ciao a tutti!
Sono nuova del forum. Sto scrivendo un codice in C che mi permetta di creare tre vettori T0, T1, T2 di dimensioni n ciascuno.
Per ognuno di essi, parto generando due distinti array di valori random, rispettivamente tra (0,p) e tra (0,n).
In seguito, ricavo T0, T1, T2, andando a moltiplicare, la prima volta, il primo valore del primo array con il primo elemento elevato alla zero del secondo array; la seconda volta, il secondo valore del primo array, con il secondo del secondo array, elevato alla prima; la terza volta, il terzo valore del primo array con il terzo valore elevato alla seconda del secondo array; ed infine, la quarta volta, il quarto valore del primo array con il quarto valore,elevato alla terza, del secondo array.
Faccio la somma dei quattro valori ricavati e colloco il risultato nella prima posizione del vettore che sto costruendo in quel momento, tra T0, T1, T2.
Ripeto l'operazione andando a scorrere gli array.
Il codice che mi esegue quanto spiegato sopra è il seguente:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
main(){
//parametri:
unsigned long long p = pow(2, 33)-1;
unsigned long long n = pow(2, 32);
// array per T0:
unsigned long long aa[p];
unsigned long long ab[n];
//array per T1:
unsigned long long ac[p];
unsigned long long ad[n];
//array per T2:
unsigned long long ae[p];
unsigned long long af[n];
unsigned long long T0[n];
unsigned long long T00[n];
unsigned long long T01[n];
unsigned long long T02[n];
unsigned long long T03[n];
unsigned long long T1[n];
unsigned long long T10[n];
unsigned long long T11[n];
unsigned long long T12[n];
unsigned long long T13[n];
unsigned long long T2[n];
unsigned long long T20[n];
unsigned long long T21[n];
unsigned long long T22[n];
unsigned long long T23[n];
srand(time(NULL));
// calcolo di T0
int ia; //genero le ai
for(ia=0; ia< p; ia++) {
aa[ia] = rand() % p + 1; // aa[] è il vettore che contiene i valori di a0,a1,...,an
// printf("aa[ia]=%llu\n", aa[ia]);
}
int ib; // genero le xi
for(ib=0 ; ib< n ; ib++) {
ab[ib] = rand() % n + 1; // ac[] è il vettore che contiene il vettore x0,...,xn
// printf("ab[ib]=%llu\n", ab[ib]);
}
int ic;
for (ic=0; ic< n; ic++){
T00[ic]= aa[ic] * (abs(floor(pow(ab[ic], 0)))) % p;
T01[ic]= aa[ic+1] * (abs(floor(pow(ab[ic], 1)))) % p;
T02[ic]= aa[ic+2] * (abs(floor(pow(ab[ic], 2)))) % p;
T03[ic]= aa[ic+3] * (abs(floor(pow(ab[ic], 3)))) % p;
T0[ic] = T00[ic] + T01[ic] + T02[ic] + T03[ic];
}
int id;
for(id=0; id< n; id++){
printf("T0[id]=%llu\n", T0[id]);
}
// calcolo di T1
int ie;
for(ie=0; ie< p; ie++){
ac[ie]= rand() % p +1;
// printf("ac[ie]=%llu\n", ac[ie]);
}
int ig;
for(ig=0; ig< n; ig++){
ad[ig]= rand() % n +1;
// printf("ad[ig]=%llu\n", ad[ig]);
}
int ih;
for (ih=0; ih< n; ih++){
T10[ih]= ac[ih] * (abs(floor(pow(ad[ih], 0)))) % p;
T11[ih]= ac[ih+1] * (abs(floor(pow(ad[ih], 1)))) % p;
T12[ih]= ac[ih+2] * (abs(floor(pow(ad[ih], 2)))) % p;
T13[ih]= ac[ih+3] * (abs(floor(pow(ad[ih], 3)))) % p;
T1[ih]= T10[ih] + T11[ih] + T12[ih] + T13[ih];
}
int ii;
for(ii=0; ii< n; ii++){
printf("T1[ii]=%llu\n", T1[ii]);
}
// calcolo di T2
int il;
for(il=0; il< p; il++){
ae[il]= rand() % p +1;
// printf("ae[il]=%llu\n", ae[il]);
}
int im;
for(im=0; im< n; im++){
af[im]= rand() % n +1;
// printf("af[im]=%llu\n", af[im]);
}
int in;
for (in=0; in< n; in++){
T20[in]= ae[in] * (abs(floor(pow(af[in], 0)))) % p;
T21[in]= ae[in+1] * (abs(floor(pow(af[in], 1)))) % p;
T22[in]= ae[in+2] * (abs(floor(pow(af[in], 2)))) % p;
T23[in]= ae[in+3] * (abs(floor(pow(af[in], 3)))) % p;
T2[in]= T20[in] + T21[in] + T22[in] + T23[in];
}
int io;
for(io=0; io< n; io++){
printf("T2[io]=%llu\n", T2[io]);
}
}
Compilo con linux:
$ gcc prova.c -o prova -lm
$./prova
E viene fuori 'Segmentation fault'!
Sareste così gentili da dirmi dove e cosa sbaglio?
Grazie