Giza Postado Fevereiro 26, 2010 Denunciar Share Postado Fevereiro 26, 2010 Olá,Estou fazendo um programa para ver se o numero informado é primo ou não.Estou confussa, não consigo achar o erro. Abaixo parte do codigo que acho que está o erro.aux=1; for(i=2;num>=i;i++){ if(num%i==0) aux=0; } if(aux==0){ puts("é primo"); }else puts("não é primo"); }Se alguém puder me ajudar, Obrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Fevereiro 26, 2010 Denunciar Share Postado Fevereiro 26, 2010 Olá.Parte do problema está em:for(i=2;num>=i;i++){ num>=i implica que quando i for igual a num o código dentro do laço for será executado. Ora, num % num = 0 ; desse modo: aux=0; } if(aux==0){ puts("é primo");e o programa dirá "é primo".Se tiver mais dúvidas, poste-as. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Fevereiro 26, 2010 Denunciar Share Postado Fevereiro 26, 2010 Vê se esse código funciona ai:#include <stdio.h> #include <math.h> int main () { int num = 3; /// Numero para verificar se é primo int aux=1; if(num % 2 != 0) { for(int i = 3; i < sqrt(num); i = i + 2) { if(num % i==0) { aux = 0; break; } } } if(aux == 0) printf("não e primo"); else printf("E primo"); }Basta você verificar primeiro se é divisível por 2, senão verifica para os ímpares até a raiz quadrada do número. Assim o código fica mais rápido quando testamos para números grandes.Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Fevereiro 27, 2010 Denunciar Share Postado Fevereiro 27, 2010 Só lembrando que a fim de evitar o cálculo repetido da raiz quadrada é recomendável salvar em uma variável. Evite utilizar funções em loops a não ser que seja necessário.Ao invés de:for(int i = 3; i < sqrt(num); i = i + 2) Você pode escrever: int raiz=sqrt(num); for(int i = 3; i < raiz; i = i + 2) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Giza Postado Fevereiro 27, 2010 Autor Denunciar Share Postado Fevereiro 27, 2010 (editado) Boa noite,Graças!!!Com as dicas de vocês consegui fazer rodar perfeitamente, o q levou menos de um minuto para consertar.Para de repente ajudar mais alguém que tenha a mesma duvida vou postar o codigo pronto abaixo, claro, éum codigo de iniciante..rsrss, mais funciona. Numeros primos informados só entre 1 e 100000.ObrigadaAbraços.#include <cstdlib> #include <iostream> int main() { int num, i, aux; puts("----------Numeros Primos------------"); do{ puts("Informe um numero - Para sair informe -1"); cin>>num; if(num==-1){ break; } aux=1; for(i=2;i<num;i++){ if(num%i==0) aux=0; } if(aux==1){ cout<<"O numero "<<num<<" é primo\n"; }else cout<<"O numero "<<num<<" não é primo\n"; }while(num>1 && num<100000); system("PAUSE"); return EXIT_SUCCESS; } Editado Fevereiro 27, 2010 por Giza Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Fevereiro 27, 2010 Denunciar Share Postado Fevereiro 27, 2010 Uma coisa... O número 1 não é primo. Por definição um número é primo se é divisível exatamente por dois números.Seu programa informa que 1 é primo porque a condição inicial do loop já retorna falsee aux permanece 1. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Giza Postado Fevereiro 27, 2010 Autor Denunciar Share Postado Fevereiro 27, 2010 Humm, é verdade.Agora vou ter q pensar um pouco mais....não tenho ideia de como arrumar.Vou ver...De qualquer forma, obrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Giza
Olá,
Estou fazendo um programa para ver se o numero informado é primo ou não.
Estou confussa, não consigo achar o erro. Abaixo parte do codigo que acho que está o erro.
Se alguém puder me ajudar, Obrigada.
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.