int main() { unsigned long long n,i=1; for(n=2;n<SMALL;n++) if(isprime((int)n)) printf("%llu %d\n",i++,intsqrt(n)); if(n%2==0) n++; for(;n<(1ULL<<32);n+=2) { if(millerrabin((unsigned int)n)) printf("%llu %d\n",i++,intsqrt(n)); } for(;n<(1ULL<<63);n+=2) { if(ullmillerrabin(n)) printf("%llu %d\n",i++,intsqrt(n)); } return 0; }
void grid_setup(struct grid_info *grid) { /* obtener datos globales */ MPI_Comm_size(MPI_COMM_WORLD, &(grid->nr_world_processes)); MPI_Comm_rank(MPI_COMM_WORLD, &(grid->my_world_rank)); /* calcular cuantos procesos por lado tendra la grilla */ grid->ppside = intsqrt(grid->nr_world_processes); /* crear comunicador para topologia de grilla */ int dimensions[2] = {grid->ppside, grid->ppside}; int wrap_around[2] = {TRUE, TRUE}; int reorder = TRUE; MPI_Cart_create(MPI_COMM_WORLD, 2, dimensions, wrap_around, reorder, &(grid->comm)); MPI_Comm_rank(grid->comm, &(grid->my_rank)); /* obtener coordenadas grillisticas del proceso */ int coordinates[2]; MPI_Cart_coords(grid->comm, grid->my_rank, 2, coordinates); grid->my_row = coordinates[0]; grid->my_col = coordinates[1]; /* obtener comunicadores para la fila y la columna del proceso */ int free_coords_for_rows[] = {FALSE, TRUE}; int free_coords_for_cols[] = {TRUE, FALSE}; MPI_Cart_sub(grid->comm, free_coords_for_rows, &(grid->row_comm)); MPI_Cart_sub(grid->comm, free_coords_for_cols, &(grid->col_comm)); }
int main(int argc, char *argv[]) { struct arguments arguments; int rad; argp_parse(&argp, argc, argv, 0, 0, &arguments); rad = atoi(arguments.args[0]); printf("%d\n",intsqrt(rad)); exit(0); }