1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C++: numeros primos entre 2 e N

Discussão em 'Programação' iniciada por nasty, 9 de Abril de 2007. (Respostas: 2; Visualizações: 7145)

  1. ora bem, tou aqui com umas duvidas num simples exercicio de c++.. se possivel podiam-me dizer o q estou a fazer mal e onde está o erro.
    o problema consiste em escrever um problema que imprima os numeros primos entre 1 e N. Para ja tenho isto:

    #include <iostream>
    #include <math.h>

    using namespace std;

    void primo(int n) {
    int nums = 1;
    for (int i = 2; i<n; i++) {
    nums++;
    for (int a = 2; a<=int(sqrt(nums)); a++) {
    if ((nums%a) != 0) cout << nums << endl; }
    }
    }

    int main() {
    int limite;
    cout << "introduza um limite: ";
    cin >> limite;
    primo(limite);
    }

    penso que a logica e mais ou menos essa, mas devo estar a falhar em qq pormenor. por exemplo, qd coloco o limite a 10 ele da-me 5,7 e 9. Se coloco a 17 da-me 5,7,9,10,11,11,13,14,15,16 :|

    bem se alguem me puder ajudar agradecia. obrigado.. cumps
     
  2. oscarolim

    oscarolim Power Member

    O erro encontra-se quando verificas se é primo.

    void primo(int n) {
    int nums = 1;
    int primo = 1;
    for (int i = 2; i<n; i++) {
    primo = 1;
    nums++;
    //a<=i pois queres ver se existe algum número entre 2 e o numero que testas como primo que o divida
    for (int a = 2; a<i; a++)
    if(nums%a)==0 ) primo=0;
    if (primo==1) cout << nums << endl;
    }
    }
     
    Última edição: 9 de Abril de 2007
  3. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    não é necessário percorrer todos os números até ao i para encontrar um divisor, se o número não é primo, então tem um divisor menor ou igual à sua raíz quadrada.
     
    Última edição: 9 de Abril de 2007

Partilhar esta Página