Ir ao conteúdo
  • Cadastre-se
Guilherme Guimarães97

C++ Tempo de execução C++ (RESOLVIDO)

Recommended Posts

Preciso fazer um trabalho que consiste no seguinte, devo criar um programa pra calcular numeros primos utilizando dois metodos diferentes, calcular o tempo de execução de cada um e imprimir os resultados em um arquivo de texto, o arquivo ta sendo criado, porém dentro do arquivo não tem nada. E so ta fazendo os calculos do metodo 1, 

Meu codigo:

#include<stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>

main() {
    clock_t tempo_inicial, tempo_final;
    double t1, t2;
    long i, X;
    int  y, j, ehPrimo, r, w;
    
                        int div;
                    
                        int g;
    
    FILE *arq;
    
    arq = fopen("arquivo.txt", "w");
    if(arq != NULL){
        X = 10000;
        
        //metodo 1...
        tempo_inicial = clock();
        //codigo metodo 1
                        printf("\n");
                    
                    y = 2;
                    
                    while(y < X)
                    {
                            ehPrimo = 1;
                            
                            j = 2;
                            r = (int)sqrt(y);
                            
                            while (j <= r)
                            {
                                if (y % j == 0)
                                {
                                    ehPrimo = 0;
                                    break;
                                }
                                j++;
                            }
                            if (ehPrimo == 1)
                            {
                                printf("%d ", y);
                            }
                            y++;
                    }
                    printf("\n");
                    return 0;
        tempo_final = clock();
        t1 = (tempo_final - tempo_inicial)/(double)CLOCKS_PER_SEC;
        
        
        //METODO 2...
        tempo_inicial = clock();
        //codigo metodo 2...
                            printf("\n");
                    
                    
                        w = 1;
                    
                        while (w < X)
                        {
                            div = 0;
                    
                            g = 1;
                    
                            while (g <= w)
                            {
                                if (w % g == 0)
                                {
                                    div = div + 1;
                                }
                                g = g + 1;
                            }
                    
                            if (div == 2 && w > 1)
                            {
                                printf("%d ", w);
                            }
                            w = w + 1;
                        }
                    
                        printf("\n");
                    
                        return 0;
        tempo_final = clock();
        t2 = (tempo_final - tempo_inicial)/(double)CLOCKS_PER_SEC;
        
        fprintf(arq, "%d %f %f\n", X, t1, t2);
    
    }else{
        printf("erro...");
    }
}

 


    (Ja consegui, mas nao sei como deletar um topico kk)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Guilherme Guimarães97 disse:

 w = 1;
                    
                        while (w < X)
                        {
                            div = 0;
                    
                            g = 1;
                    
                            while (g <= w)
                            {
                                if (w % g == 0)
                                {
                                    div = div + 1;
                                }
                                g = g + 1;
                            }
                    
                            if (div == 2 && w > 1)
                            {
                                printf("%d ", w);
                            }
                            w = w + 1;
                        }

Poderia me explicar o que isso faz ? 

 

adicionado 9 minutos depois

Eu confesso que tive alguma dificuldade de entender o código.


Aí eu fiz esse aqui para inspirar você. Dá uma olhada. (Não tem a parte de escrever em arquivo)
 

#include <math.h>
#include <stdio.h>
#include <time.h>

int primofast(int numero) {
	if (numero == 2)
		return 1;
	if (numero % 2) {
		for (int i = 3; i < numero / i + 1; i += 2) {
			if (numero % i == 0)
				return 0;
		}
		return 1;
	}
}

int ehprimo(int numero) {
  int limite = (int)sqrt(numero);
	for (int i = 2; limite ; i++) {
		if (numero % i == 0)
			return 0;
	}
	return 1;
}

int coisa() {
	int w = 1, g, div ;
	while (w < 10000 ) {
		div = 0;
		g = 1;
		while (g <= w) {
			if (w % g == 0) {
				div = div + 1;
			}
			g = g + 1;
		}
		if (div == 2 && w > 1) {
		}
		w = w + 1;
	}
}


int main(void) {
	clock_t tempo_inicial, tempo_final;
	int x;
	printf("Começou\n");
	tempo_inicial = clock();
	for (int i = 1; i < 10000; i++) {
		for (int j = 2; j < 1000; j++)
			x = primofast(j);
	}
	tempo_final = clock();
	printf("%f\n", (tempo_final - tempo_inicial) / (double)CLOCKS_PER_SEC);

	printf("Começou\n");
	tempo_inicial = clock();
	for (int i = 1; i < 10000; i++) {
		for (int j = 2; j < 1000; j++)
			x = ehprimo(j);
	}
	tempo_final = clock();
	printf("%f\n", (tempo_final - tempo_inicial) / (double)CLOCKS_PER_SEC);

	return 0;
}

 

adicionado 13 minutos depois


Você pode tentar algo assim 

3 horas atrás, Guilherme Guimarães97 disse:

 r = (int)sqrt(y);

você poderia trocar no loop por 

while ( j < (y/j) )  ... experimenta e diz pra gente se ficou mais rápido.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×