Teste de desempenho com números primos em C
Estendendo o assunto de teste de desempenho com números primos em BASH que publiquei antes http://www.vivaolinux.com.br/script/Teste-de-desempenho-com-numeros-primos-em-BASH
tive um tempinho e codifiquei também em C.
Desta vez não compilei no SO do servidor, mas em desktop Windows com GCC mesmo.
No período de quase uma hora rodando num Celeron D com 1 GB de memória, obtive UM resultado:
Primo 1410065413
Primo 1410065441
Primo 1410065443
O Desktop apresenta alguns momentos de "stall", travamento, mas bem de leve. Tipo ao digitar demora pra sair do buffer.
Vou compilar no servidor e executar com `time` como fiz com o BASH.
Testem o desempenho e divirtam-se!
tive um tempinho e codifiquei também em C.
Desta vez não compilei no SO do servidor, mas em desktop Windows com GCC mesmo.
No período de quase uma hora rodando num Celeron D com 1 GB de memória, obtive UM resultado:
Primo 1410065413
Primo 1410065441
Primo 1410065443
O Desktop apresenta alguns momentos de "stall", travamento, mas bem de leve. Tipo ao digitar demora pra sair do buffer.
Vou compilar no servidor e executar com `time` como fiz com o BASH.
Testem o desempenho e divirtam-se!
Descrição
Estendendo o assunto de teste de desempenho com números primos em BASH que publiquei antes http://www.vivaolinux.com.br/script/Teste-de-desempenho-com-numeros-primos-em-BASH
tive um tempinho e codifiquei também em C.
Desta vez não compilei no SO do servidor, mas em desktop Windows com GCC mesmo.
No período de quase uma hora rodando num Celeron D com 1 GB de memória, obtive UM resultado:
Primo 1410065413
Primo 1410065441
Primo 1410065443
O Desktop apresenta alguns momentos de "stall", travamento, mas bem de leve. Tipo ao digitar demora pra sair do buffer.
Vou compilar no servidor e executar com `time` como fiz com o BASH.
Testem o desempenho e divirtam-se!
tive um tempinho e codifiquei também em C.
Desta vez não compilei no SO do servidor, mas em desktop Windows com GCC mesmo.
No período de quase uma hora rodando num Celeron D com 1 GB de memória, obtive UM resultado:
Primo 1410065413
Primo 1410065441
Primo 1410065443
O Desktop apresenta alguns momentos de "stall", travamento, mas bem de leve. Tipo ao digitar demora pra sair do buffer.
Vou compilar no servidor e executar com `time` como fiz com o BASH.
Testem o desempenho e divirtam-se!
Versões atualizadas deste script
#include <stdio.h>
int main(){
int j, primo = 0;
unsigned long i=0;
for ( i=10000000000; i <= 999999999999; i++){
// for ( i=10; i<=99; i++ ){
j=i;
primo=0;
for ( j=i; j>=1; j-- ){
if ( i%j == 0 ){
primo++;
if ( primo > 2 ){
j=1;
}
else{
if ( primo == 2 && j == 1 ){
printf("Primo %d\n", i);
}
}
}
}
}
}
#include <math.h>
/* Compilar com gcc -lm prog.c -o prog
*
* -lm: linkar biblioteca math
* */
int main()
{
unsigned long int j, fim, primo;
unsigned long i = 0;
for (i = 1000000000; i <= 99999999999; i++) {
fim = 1;
if ((i&1) == 0){ // numero par não é primo, exceto o 2
continue;
}
fim = (int)sqrt((double)i); // se não tiver divisor até a raiz quadrada, é primo
fim = (fim+1) | 1; // transformando o fim em IMPAR, se não era
primo = 1;
for (j = 3; j <= fim; j+=2) {
/* laço vai até raiz quadrada e só tenta divisore impares*/
if ((i % j) == 0) {
primo=0;
break; // não é primo, pois divide por j. Aborta o laço
}
}
if (primo) {
printf ("Primo %u\n",i);
}
}
}
Em um processador 64 bits 2.5Ghz, para achar o primeiro primo
- tua versão: 46 segundos
- esta versão: menos de 1 segundo
Veja, se ao dividir observa-se que o numero divide por 5, acabou!
Porque perder tempo tentando por 6, 7, 8, ... se já se sabe que ele não é um número primo?