Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucas _vinicius

Erro decomposição de fatores primos

Recommended Posts

Então eu resolvi aprender linguagem c por conta própria ,e estou seguindo uma apostilha,já cheguei em estruturas de repetição então resolvi fazer alguns exercícios complexos para pegar mais o raciocínio da linguagem,e cheguei nesse exercício:

 

Fazer um programa para receber um número do usuário e decompô-lo em fatores primos.

 

e já fiz o seguinte:

#include <stdio.h>

int main()
{
	int vlr,cont,x,y;
	cont=2;
	printf ("digite um valor para ser decomposto em FATORES PRIMOS: ");
	scanf ("%d",&vlr);
	
	for (;;)
	{
		if (vlr%cont==0)
		{
			if (vlr/cont==1)
			{
				printf ("%d ""|"" %d\n",vlr,cont);
				break;
			}
			printf ("%d ""|"" %d\n",vlr,cont);
			vlr=(vlr/cont);
		}
		else
		{
			for (cont;;cont++)
			{
				for (y=0,x=1;x<=cont;++x)
				if ((cont%x)==0) y+=x;
				if ((cont+1)==y)
				{
					cont=y;
					break;
				}
			}
		}
	}
	return(0);
}

o erro e que se o numero decomposto tiver o ultimo fator primo 2 ou 3 roda tudo bem,mas se for 5 ele simplesmente não fecha o laço,nem finaliza o programa,eu queria saber onde esta o erro,para se futuramente eu tiver um erro parecido eu já saber resolver;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá pra fazer a comparação usando um laço simples de repetição:

#include <stdlib.h>
#include <stdio.h>
 
int main(void)
{
    int valorInteiro = 0;
    int valorSobra = 1;
    int divisor = 2;
 
    printf ("digite um valor para ser decomposto em FATORES PRIMOS: ");
    scanf ("%d", &valorInteiro);
 
    while( (valorInteiro != divisor) || !(valorSobra) )
    {
        if ( !(valorInteiro % divisor) )
        {
            printf("divisor: %d\n", divisor);
            valorInteiro /= divisor;
        }
        else
            divisor++;
    }
 
    printf("divisor: %d\n", divisor);
 
    return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu fui da mais uma olhada no meu programa usando um pouco da logica do seu programa e descobri onde estava o erro agora tem outro erro num sei onde e esse,o erro do calculo estava nessa linha:

for (cont;;cont++)
			{
				for (y=0,x=1;x<=cont;++x)
				if ((cont%x)==0) y+=x;
				if ((cont+1)==y)
				{
					cont=y; //aqui esta o erro eu estava atribuindo ao fator o valor de comparação,assim sempre iria dar um numero primo +1,sendo que 'y' era a soma dos divisores do numero;(solução: cont=y-1;)
					break; 
				}
			}

mas agora tenho outro erro alguém sabe onde é?e um "Unknown software exeption"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe que depois que você falo isso fui da uma analisada e percebi que não precisava de um 'for' para fazer o incremento no fator primo,so precisava do teste;Então refiz o programa dese geito:

#include <stdio.h>

int main()
{
	int vlr,fat,x,y;
	fat=2;
	printf ("digite um valor para ser decomposto em FATORES PRIMOS: ");
	scanf ("%d",&vlr);
	
	for (;;)                           //laço do calculo
	{
		if (vlr%fat==0)            //caso seja uma divisão exata execulta
		{
			if (vlr/fat==1) //se tiver de resultado 1 finaliza toda a função
			{
				printf ("%d ""|"" %d\n",vlr,fat);
				break;
			}
			printf ("%d ""|"" %d\n",vlr,fat);
			vlr=(vlr/fat);     //muda o valor da variavel pelo da divisão
		}
		else                             //se o calculo não for exato execulta
		{
			for (y=0,x=1;x<=fat;++x)     //test do Fator Primo
			if (fat%x==0) y+=x;
			if (fat+1==y)
			{
				fat=y-1;             //fat passa para o proximo Fator Primo
			}
			fat++;                       //incremento (substitui o for por isso
			
		}
	}
	return(0);
}

Esta funcionando perfeitamente...vlw você ajudou muito. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.