Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Marly da Cruz Cláudio 8936885
- Danilo Marques Araujo dos Santos 8598670
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <omp.h>
- int main(int argc, char **argv) {
- int i, j, soma;
- int quant_num_perfeitos = 0; //Armazenada a quantidade de números perfeitos encontrados
- int num_perfeitos[10]; //Vetor para armazenar os números perfeitos
- int intervalo = atoi(argv[1]); //Lê o intervalo a ser buscado do terminal
- /*
- Escolhemos o escalonamento guiado pois cada iteração do loop aumentara gradualmente
- a sua carga de trabalho, e a diferenca entre a carga de trabalho entre as ultimas
- iteracoes e as do comeco e muito grande, assim, se a gente fosse usar o dinamico,
- o ideal seria pegar um chunk de tamanho 1, mas ai o overhead seria grande.
- Colocamos a regiao critica como sendo o for mais interno pois pode dar
- problema caso as threads executem essa parte do codigo ao mesmo tempo.
- */
- #pragma omp parallel private(soma) num_threads(4)
- {
- #pragma omp for schedule(guided, 2)
- for(i = 1; i < intervalo; i++) {
- soma = 0;
- #pragma omp critical
- for(j = 1; j < i; j++) {
- if(i%j == 0) {
- soma += j;
- }
- }
- if(soma == i) {
- num_perfeitos[quant_num_perfeitos] = i;
- quant_num_perfeitos++;
- }
- }
- }
- for(i = 0; i < quant_num_perfeitos; i++) {
- printf("%d ", num_perfeitos[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement