Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- #include<time.h>
- #include<vector>
- #include<thread>
- #include<math.h>
- using namespace std;
- typedef struct{
- int linhaInicial, linhaFinal, colunaInicial, colunaFinal, total;
- }Parametro;
- vector< vector<int> > matriz;
- void preencher(int linha, int coluna);
- void imprimr(int linha, int coluna);
- void setParametros(std::vector<Parametro> *parametro, int numThreads, int linha, int coluna);
- /*void imprimirParametros(vector<Parametro> parametro);
- void imprimirParametros(vector<Parametro> ¶metro);*/
- bool primo(int numero);
- void buscarPrimos(Parametro ¶metro);
- int main()
- {
- srand(25);
- int linha, coluna, numThreads;
- vector<Parametro> parametro;
- vector<thread> threads;
- int qtdPrimos = 0;
- /* Parametro par;
- par.linhaInicial = 0;
- par.linhaFinal = 0;
- par.colunaInicial = 0;
- par.colunaFinal = 0;*/
- cout << "Informe a quantidade de linhas: ";
- cin >> linha;
- cout << "Informe a quantidade de coluna: ";
- cin >> coluna;
- cout << "Informe o numero de threads: ";
- cin >> numThreads;
- preencher(linha, coluna);
- //imprimr(linha, coluna);
- setParametros(¶metro, numThreads, linha, coluna);
- //imprimirParametros(parametro);
- for(int i = 0; i < numThreads; i++)
- {
- threads.push_back(std::thread(buscarPrimos, ref(parametro[i])));
- }
- for(int i = 0; i < numThreads; i++)
- {
- threads[i].join();
- }
- for(int i = 0; i < numThreads; i++)
- {
- qtdPrimos +=parametro[i].total;
- }
- cout << "O total de primos vale " << qtdPrimos << endl;
- return(0);
- }
- void preencher(int linha, int coluna)
- {
- for(int i = 0; i < linha; i++)
- {
- vector<int> aux;
- for(int j = 0; j < coluna; j++)
- {
- aux.push_back(rand() % 100000);
- }
- matriz.push_back(aux);
- }
- }
- void imprimr(int linha, int coluna)
- {
- for(int i = 0; i < linha; i++)
- {
- for(int j = 0; j < coluna; j++)
- {
- cout << matriz[i][j] << " ";
- }
- cout << endl;
- }
- }
- void setParametros(std::vector<Parametro> *parametro, int numThreads, int linha, int coluna)
- {
- int i;
- Parametro aux;
- for(i = 0 ; i < numThreads - 1; i++ )
- {
- aux.linhaInicial = 0;
- aux.linhaFinal = linha;
- aux.colunaInicial = i*coluna/numThreads;
- aux.colunaFinal = (i+1)*coluna/numThreads;
- aux.total = 0;
- parametro->push_back(aux);
- }
- aux.linhaInicial = 0;
- aux.linhaFinal = linha;
- aux.colunaInicial = i*coluna/numThreads;
- aux.colunaFinal = coluna;
- aux.total = 0;
- parametro->push_back(aux);
- }
- /*void imprimirParametros(vector<Parametro> parametro)
- {
- for(int i = 0; i < parametro.size(); i++)
- {
- cout << parametro[i].linhaInicial ;
- cout << " " << parametro[i].linhaFinal;
- cout << " " << parametro[i].colunaInicial ;
- cout << " " << parametro[i].colunaFinal ;
- cout << endl;
- }
- cout << endl;
- }
- void imprimirParametros(vector<Parametro> ¶metro)
- {
- for(int i = 0; i < parametro.size(); i++)
- {
- cout << parametro[i].total << endl;
- }
- }*/
- bool primo(int numero)
- {
- if(numero == 1)
- {
- return(false);
- }
- if(numero == 2)
- {
- return(true);
- }
- else
- {
- int cont = 0;
- for(int i = 1; i <= sqrt(numero); i++)
- {
- if(numero % i == 0)
- {
- cont++;
- }
- }
- if(cont == 1)
- {
- return(true);
- }
- else
- {
- return(false);
- }
- }
- }
- void buscarPrimos(Parametro ¶metro)
- {
- for(int i = parametro.linhaInicial; i < parametro.linhaFinal; i++)
- {
- for(int j = parametro.colunaInicial; j < parametro.colunaFinal; j++)
- {
- if(primo(matriz[i][j]))
- {
- parametro.total += 1;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement