capoia 0 Denunciar post Postado Maio 2, 2016 Boa tarde, estou aqui novamente pedindo uma ajuda, não quero que vocês pensem que quero que faça minhas tarefas ou algo do tipo é só porque não consegui encontrar mesmo , meu professor de algoritmo passou pra acharmos os números primos de 1 a 500 .. eu sei que para achar o numero primo ele tem que ser divisível por 1 e por ele mesmo ... e somente por essas duas opções. eu achei o seguinte algoritmo pesquisando pela net : Var // Seção de Declarações das variáveis n, cn, i, dv: inteiro Inicio // Seção de Comandos, procedimento, funções, operadores, etc... para i de 1 ate 500 faca cn <- 0 para dv de 1 ate i faca se (i % dv = 0) entao cn <- cn + 1 fimse fimpara se cn = 2 entao escreval ("Primo: ", i, " ") fimse fimpara Fimalgoritmo e ele realmente funciona .. só que eu não consigo entender o código , porque ai ele verifica o mod para ver se é 0 e ai conclui que é divisível pelo próprio numero e por 1 , entendi , porem como garante que não é divisível por outros números? alguém pode por favor me explicar?desde já agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
itlpps 109 Denunciar post Postado Maio 2, 2016 Tem dois laços (instrução para). O de dentro, verifica se i % dv = 0. Certo. dv, inicia em 1, ou seja, todos os números são divisiveis por 1, logo cn incrementa +1. Isso vai até o número i. Chega uma hora que i é igual a dv, e também incrementa 1 em cn. Se cn = 2, ou seja, se i for divisivel por 1 e i, então o número é primo. Fui claro? Me parece confuso minha explicação kkk Compartilhar este post Link para o post Compartilhar em outros sites
pedropgomes 4 Denunciar post Postado Maio 2, 2016 na hora de verificar o cn é ai que diz se é primo ou não... pois se o numero for primo de todos os mods que ele tirou só vai ter 2 divisões de mod = 0 caso contrário não é primo Compartilhar este post Link para o post Compartilhar em outros sites
capoia 0 Denunciar post Postado Maio 2, 2016 Tem dois laços (instrução para). O de dentro, verifica se i % dv = 0. Certo. dv, inicia em 1, ou seja, todos os números são divisiveis por 1, logo cn incrementa +1. Isso vai até o número i. Chega uma hora que i é igual a dv, e também incrementa 1 em cn. Se cn = 2, ou seja, se i for divisivel por 1 e i, então o número é primo. Fui claro? Me parece confuso minha explicação kkk na hora de verificar o cn é ai que diz se é primo ou não... pois se o numero for primo de todos os mods que ele tirou só vai ter 2 divisões de mod = 0 caso contrário não é primo Tive que ler algumas vezes kk mas acho que entendi .... então ali no caso o CN vai contar quantas vezes foi divisível né? ( quantas vezes o mod deu zero ) e se for 2 ele exibe esse numero , correto? Compartilhar este post Link para o post Compartilhar em outros sites
itlpps 109 Denunciar post Postado Maio 2, 2016 Tive que ler algumas vezes kk mas acho que entendi .... então ali no caso o CN vai contar quantas vezes foi divisível né? ( quantas vezes o mod deu zero ) e se for 2 ele exibe esse numero , correto? Exato. Exemplo: i = 4; 4 % 1 = 0 cn+1 4 % 2 = 0 cn+1 4 % 3 = 1 4 % 4 = 0 cn+1 cn vale 3, logo não é primo. i = 7; 7 % 1 = 0 cn+1 7 % 2 = 1 7 % 3 = 1 7 % 4 = 3 7 % 5 = 2 7 % 6 = 1 7 % 7 = 0 cn+1 cn vale 2, logo é primo. Compartilhar este post Link para o post Compartilhar em outros sites
snowstormdelivery 19 Denunciar post Postado Maio 2, 2016 Bem, você entendeu, mas parece estar com conceitos vagos, ainda. Antes de tudo, recomendo utilizar o VisuAlg para testar algoritmos, linha por linha. Era importante o autor do código ter criado uma legenda para as variáveis, porque estas não são tão intuitivas para um iniciante, portanto, segue legendas criadas por mim: cn: Contador de números Esta se caracteriza por ser inteira e armazenar quantos divisores um número teve por repetição (iteração). i: Índice Assim como um índice de um livro, este indica qual o número da repetição (iteração), do primeiro laço. dv: Divisor Da mesma forma de "i", este também é um índice. Esta variável indica qual número será o divisor de "i". Outro problema recorrente (impedindo compreensão) é a falta de indentação. Confira o código e perceba como é mais fácil diferir os laços, que estão dentro de si mesmos: Var // Seção de Declarações das variáveis n, cn, i, dv: inteiro Inicio // Seção de Comandos, procedimento, funções, operadores, etc... para i de 1 ate 500 faca //Este é o primeiro laço e funciona para definir o dividendo cn <- 0 //O contador de número precisa ser "zerado", quando uma repetição começa, porque o dividendo muda. para dv de 1 ate i faca //Este é o segundo laço e conta os divisores de 1 ate o dividendo i se (i % dv = 0) entao //Se a divisão entre o dividendo "i" e o divisor "dv" tiver resto 0: cn <- cn + 1 //Contador de números recebe +1 fimse fimpara se cn = 2 entao //Se o contador de números obtiver somente 2 incrementos: escreval ("Primo: ", i, " ") //então o dividendo i é mostrado, sendo primo. fimse fimpara Fimalgoritmo O código acima foi indentado e comentado, ato necessário para terceiros (como você) entender o algoritmo. Lembre-se: A variável "i" só é incrementada quando o segundo laço faz todas repetições. Atualização: Uma instrução não obrigatória (mas que melhora a performance) é criar uma condição que encerra o segunda laço, ASSIM que for detectado mais de 2 divisores. Compartilhar este post Link para o post Compartilhar em outros sites
capoia 0 Denunciar post Postado Maio 2, 2016 Bem, você entendeu, mas parece estar com conceitos vagos, ainda. Antes de tudo, recomendo utilizar o VisuAlg para testar algoritmos, linha por linha. Era importante o autor do código ter criado uma legenda para as variáveis, porque estas não são tão intuitivas para um iniciante, portanto, segue legendas criadas por mim: cn: Contador de números Esta se caracteriza por ser inteira e armazenar quantos divisores um número teve por repetição (iteração). i: Índice Assim como um índice de um livro, este indica qual o número da repetição (iteração), do primeiro laço. dv: Divisor Da mesma forma de "i", este também é um índice. Esta variável indica qual número será o divisor de "i". Outro problema recorrente (impedindo compreensão) é a falta de indentação. Confira o código e perceba como é mais fácil diferir os laços, que estão dentro de si mesmos: Var // Seção de Declarações das variáveis n, cn, i, dv: inteiro Inicio // Seção de Comandos, procedimento, funções, operadores, etc... para i de 1 ate 500 faca //Este é o primeiro laço e funciona para definir o dividendo cn <- 0 //O contador de número precisa ser "zerado", quando uma repetição começa, porque o dividendo muda. para dv de 1 ate i faca //Este é o segundo laço e conta os divisores de 1 ate o dividendo i se (i % dv = 0) entao //Se a divisão entre o dividendo "i" e o divisor "dv" tiver resto 0: cn <- cn + 1 //Contador de números recebe +1 fimse fimpara se cn = 2 entao //Se o contador de números obtiver somente 2 incrementos: escreval ("Primo: ", i, " ") //então o dividendo i é mostrado, sendo primo. fimse fimpara Fimalgoritmo O código acima foi indentado e comentado, ato necessário para terceiros (como você) entender o algoritmo. Lembre-se: A variável "i" só é incrementada quando o segundo laço faz todas repetições. Atualização: Uma instrução não obrigatória (mas que melhora a performance) é criar uma condição que encerra o segunda laço, ASSIM que for detectado mais de 2 divisores. Ual , muito obrigado , mais claro que isso impossível , obrigado mesmo pela ajuda, me deu uma aula agora :) Compartilhar este post Link para o post Compartilhar em outros sites