Advertisement
Caio_25

Matriz Numeros Primos

Aug 11th, 2019
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.73 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<time.h>
  4. #include<vector>
  5. #include<thread>
  6. #include<math.h>
  7.  
  8. using namespace std;
  9.  
  10.  
  11. typedef struct{
  12.     int linhaInicial, linhaFinal, colunaInicial, colunaFinal, total;
  13. }Parametro;
  14.  
  15. vector< vector<int> > matriz;
  16.  
  17. void preencher(int linha, int coluna);
  18. void imprimr(int linha, int coluna);
  19. void setParametros(std::vector<Parametro> *parametro, int numThreads, int linha, int coluna);
  20. /*void imprimirParametros(vector<Parametro> parametro);
  21. void imprimirParametros(vector<Parametro> &parametro);*/
  22. bool primo(int numero);
  23. void buscarPrimos(Parametro &parametro);
  24.  
  25. int main()
  26. {
  27.   srand(25);
  28.   int linha, coluna, numThreads;
  29.   vector<Parametro> parametro;
  30.   vector<thread> threads;
  31.   int qtdPrimos = 0;
  32.  
  33. /*  Parametro par;
  34.   par.linhaInicial = 0;
  35.   par.linhaFinal = 0;
  36.   par.colunaInicial = 0;
  37.   par.colunaFinal = 0;*/
  38.  
  39.   cout << "Informe a quantidade de linhas: ";
  40.   cin >> linha;
  41.  
  42.   cout << "Informe a quantidade de coluna: ";
  43.   cin >> coluna;
  44.  
  45.   cout << "Informe o numero de threads: ";
  46.   cin >> numThreads;
  47.  
  48.   preencher(linha, coluna);
  49.   //imprimr(linha, coluna);
  50.   setParametros(&parametro, numThreads, linha, coluna);
  51.   //imprimirParametros(parametro);
  52.  
  53.   for(int i = 0; i < numThreads; i++)
  54.   {
  55.  
  56.     threads.push_back(std::thread(buscarPrimos, ref(parametro[i])));
  57.  
  58.   }
  59.  
  60.   for(int i = 0; i < numThreads; i++)
  61.   {
  62.     threads[i].join();
  63.   }
  64.  
  65.   for(int i = 0; i < numThreads; i++)
  66.   {
  67.       qtdPrimos +=parametro[i].total;
  68.   }
  69.  
  70.   cout << "O total de primos vale " << qtdPrimos << endl;
  71.  
  72.   return(0);
  73. }
  74.  
  75. void preencher(int linha, int coluna)
  76. {
  77.  
  78.   for(int i = 0; i < linha; i++)
  79.   {
  80.     vector<int> aux;
  81.     for(int j = 0; j < coluna; j++)
  82.     {
  83.       aux.push_back(rand() % 100000);
  84.     }
  85.     matriz.push_back(aux);
  86.   }
  87.  
  88.  
  89. }
  90.  
  91. void imprimr(int linha, int coluna)
  92. {
  93.   for(int i = 0; i < linha; i++)
  94.   {
  95.     for(int j = 0; j < coluna; j++)
  96.     {
  97.       cout << matriz[i][j] << " ";
  98.     }
  99.  
  100.     cout << endl;
  101.   }
  102. }
  103.  
  104. void setParametros(std::vector<Parametro> *parametro, int numThreads, int linha, int coluna)
  105. {
  106.   int i;
  107.   Parametro aux;
  108.  
  109.   for(i = 0 ; i < numThreads - 1; i++ )
  110.   {
  111.     aux.linhaInicial = 0;
  112.     aux.linhaFinal = linha;
  113.     aux.colunaInicial = i*coluna/numThreads;
  114.     aux.colunaFinal = (i+1)*coluna/numThreads;
  115.     aux.total = 0;
  116.     parametro->push_back(aux);
  117.  
  118.   }
  119.  
  120.   aux.linhaInicial = 0;
  121.   aux.linhaFinal = linha;
  122.   aux.colunaInicial = i*coluna/numThreads;
  123.   aux.colunaFinal = coluna;
  124.   aux.total = 0;
  125.   parametro->push_back(aux);
  126.  
  127. }
  128.  
  129. /*void imprimirParametros(vector<Parametro> parametro)
  130. {
  131.   for(int i = 0; i < parametro.size(); i++)
  132.   {
  133.     cout << parametro[i].linhaInicial ;
  134.     cout << " " << parametro[i].linhaFinal;
  135.     cout << " " << parametro[i].colunaInicial ;
  136.     cout << " " << parametro[i].colunaFinal ;
  137.     cout << endl;
  138.   }
  139.   cout << endl;
  140. }
  141.  
  142. void imprimirParametros(vector<Parametro> &parametro)
  143. {
  144.   for(int i = 0; i < parametro.size(); i++)
  145.   {
  146.     cout << parametro[i].total << endl;
  147.   }
  148. }*/
  149.  
  150. bool primo(int numero)
  151. {
  152.  
  153.   if(numero == 1)
  154.   {
  155.     return(false);
  156.   }
  157.  
  158.   if(numero == 2)
  159.   {
  160.     return(true);
  161.   }
  162.  
  163.   else
  164.   {
  165.     int cont = 0;
  166.  
  167.     for(int i = 1; i <= sqrt(numero); i++)
  168.     {
  169.       if(numero % i == 0)
  170.       {
  171.         cont++;
  172.       }
  173.     }
  174.  
  175.     if(cont == 1)
  176.     {
  177.       return(true);
  178.     }
  179.  
  180.     else
  181.     {
  182.       return(false);
  183.     }
  184.   }
  185.  
  186.  
  187. }
  188.  
  189. void buscarPrimos(Parametro &parametro)
  190. {
  191.   for(int i = parametro.linhaInicial; i < parametro.linhaFinal; i++)
  192.   {
  193.     for(int j = parametro.colunaInicial; j < parametro.colunaFinal; j++)
  194.     {
  195.       if(primo(matriz[i][j]))
  196.       {
  197.         parametro.total += 1;
  198.       }
  199.     }
  200.   }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement