Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. /*
  2. Marly da Cruz Cláudio 8936885
  3. Danilo Marques Araujo dos Santos 8598670
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <omp.h>
  9.  
  10. int main(int argc, char **argv) {
  11. int i, j, soma;
  12. int quant_num_perfeitos = 0; //Armazenada a quantidade de números perfeitos encontrados
  13. int num_perfeitos[10]; //Vetor para armazenar os números perfeitos
  14. int intervalo = atoi(argv[1]); //Lê o intervalo a ser buscado do terminal
  15.  
  16. /*
  17. Escolhemos o escalonamento guiado pois cada iteração do loop aumentara gradualmente
  18. a sua carga de trabalho, e a diferenca entre a carga de trabalho entre as ultimas
  19. iteracoes e as do comeco e muito grande, assim, se a gente fosse usar o dinamico,
  20. o ideal seria pegar um chunk de tamanho 1, mas ai o overhead seria grande.
  21.  
  22. Colocamos a regiao critica como sendo o for mais interno pois pode dar
  23. problema caso as threads executem essa parte do codigo ao mesmo tempo.
  24. */
  25.  
  26.  
  27. #pragma omp parallel private(soma) num_threads(4)
  28. {
  29. #pragma omp for schedule(guided, 2)
  30. for(i = 1; i < intervalo; i++) {
  31. soma = 0;
  32. #pragma omp critical
  33. for(j = 1; j < i; j++) {
  34. if(i%j == 0) {
  35. soma += j;
  36. }
  37. }
  38. if(soma == i) {
  39. num_perfeitos[quant_num_perfeitos] = i;
  40. quant_num_perfeitos++;
  41. }
  42. }
  43. }
  44.  
  45. for(i = 0; i < quant_num_perfeitos; i++) {
  46. printf("%d ", num_perfeitos[i]);
  47. }
  48.  
  49. return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement