O estudo formal dos números primos começou na Grécia Antiga, por volta do século VI a.C. A Escola Pitagórica (c. 530 a.C.) trouxe as primeiras noções sobre números primos e compostos, atreladas ao misticismo e à base da matemática na época. Euclides, fez um dos principais avanços na época, formalizando o conceito de número primo e traz a primeira prova matemática de que a quantidade de números primos não tem fim. Ao longo dos séculos, diversos matemáticos continuaram o estudo dos números primos, Pierre de Fermat (século XVII) e Carl Friedrich Gauss (século XIX) os estudaram e aprofundaram a teoria dos números.
Apesar de ser um conceito antigo, eles são importantes na era moderna. Uma das principais utilidades para números primos é utilizá-los na criptografia e segurança moderna. O fato de multiplicar dois números primos gigantes é fácil, mas descobrir quais foram esses números a partir do resultado é um processo extremamente lento para computadores comuns. Isso garante a privacidade de dados na Internet. Além da criptografia, a busca por primos maiores impulsiona a melhoria de processadores, enquanto o cálculo rápido de fatores primos é usado para resolver problemas complexos de redes, tabelas de dispersão (hash) e algoritmos de machine learning.
Neste problema, você deve criar um programa de computador que irá receber diversos números inteiros muito grandes. Você deve então decidir se eles são primos, ou não, e efetuar a soma dos números apenas dos números primos, imprimindo o resultado no final.
A primeira linha é composta por 1 número inteiro: . Depois, números inteiros, , são informados .
Seu programa deve imprimir a soma de todos os números primos do vetor.
Seu programa deve ser construído em OpenMP e deve usar o paralelismo para poder executar em tempo hábil.
10
2 3 4 5 6 7 8 9 10 11
28
5
4446744073709551560 4446744073709551561 4446744073709551562 4446744073709551563 4446744073709551564
18446744073709551612