Ir para conteúdo

POWERED BY:

Arquivado

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

AprendizC

[Resolvido] Primo (Função com Parâmetro)

Recommended Posts

Bom dia Pessoal,

 

 

Novo exercício nova dúvida, se alguém puder me ajudar eu agradeço. Meu SO é o Windows XP e meu Compilador é o DEV C++ 4.9.9.2.

 

Aqui está o problema: Função que receba como parâmetro um número inteiro e retorne o maior número primo existente entre 1 e este número.

 

Segue o que eu já tentei fazer:

 

#include <stdio.h>
#include <stdlib.h>
  
  int Primo(int n){
	  int i=1,j=1, cont =0, primo;
	  
	  for(i; i<=n; i++)
		 for(j; j<=n; j++)
			if(i%j ==0){
			  cont =cont+1;
			  if(cont <=2)
				 primo=i;	 
			  }
	  n=primo;
}

int main(){
	int num, P;
	
	printf("Digite um numero:");
	scanf("%d",&num);
	P =Primo(num);
	printf("\n\n");
	printf("O maior numero Primo entre 1 e %d",P);
	printf("\n\n");
  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
 int i,j;
  int maior = 2;
  for(i=2; i<=n; i++) {
	 for(j=2; j<i; j++)
		if(i%j == 0)
		  break;
	 if (j==i && i > maior) maior = i;
  }
  return maior;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca faça isto:

for(i; i<=n; i++)
		 for(j; j<=n; j++)

Inicie as variáveis. No caso do "i", funciona (apesar de ser feio :P ), mas o "j", não.

Na primeira execução do loop com o "i", j vai até (n+1). Na segunda execução do loop "i", "j" está com o antigo valor (n+1) e não é executado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
Inicie as variáveis.

 

Ele iniciou. Dá uma olhada no início.

 

Uma coisa que dá p/ tirar (mas não fiz antes porque senão vai encher de nego procurando maior sem fazer comparação em outros casos também) é o i > maior e maior = 2: como o maior primo entre 1 e 2, inclusive é 2, se você possui um intervalo maior e o número for primo, então ele é maior ou igual a 2. E o if fica

 

if (i == j) maior = i;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inicie as variáveis.

Ele iniciou. Dá uma olhada no início.

 

Sim. Eu vi.

Escrevi rápido e me expressei mal.

 

O que eu quis explicitar é que o loop com "j" não seria executado o número de vezes desejado, já que essa variável não estava sendo iniciada a cada execução do loop principal ("i").

Compartilhar este post


Link para o post
Compartilhar em outros sites

:wacko: Estou tentando outra maneira de incrementar o j, mas dessa maneira que eu fiz o resultado não tem nada haver, podem me orientar então em como incrementar o j ?

 

int Primo(int n){
	  int i=1,j=0, cont =0, primo;
	  
	  for(i; i<=n; i++)
			j++;
			if(i%j ==0){
			  cont =cont+1;
			  if(cont <=2)
				 primo=i;	 
			  }
	 return primo;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Opss ! Não tinha prestado atenção suficiente no comentário do Java.Isis. Conforme a orientação dele, meu código ficou assim:

 

#include <stdio.h>
#include <stdlib.h>
  
 int Primo(int n) {
 int i,j;
	  int maior = 2;
	  for(i=2; i<=n; i++) {
		 for(j=2; j<i; j++)
			if(i%j == 0)
			  break;
		 if (j==i && i > maior) maior = i;
	  }
	  return maior;
}	  

int main(){
	int num, P;
	
	printf("Digite um numero:");
	scanf("%d",&num);
	P =Primo(num);
	printf("\n\n");
	printf("O maior numero Primo entre 1 e %d = %d",num,P);
	printf("\n\n");
  system("PAUSE");	
  return 0;
}

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.