View Full Version : C++: numeros primos entre 2 e N


nasty
09-04-2007, 05:50
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

oscarolim
09-04-2007, 09:15
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; }
}
}

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;
}
}

Rui_Carlos
09-04-2007, 15:11
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.