Вывести простые числа от 1 до 100

Необходимо вывести числа между 1 и 100. Но при этом надо ввести простые числа в этом промежутке в вектор, хранящий простые числа. И после вывести этот вектор простых чисел. Объясните что тут не так, при выводе вектора все равно все его значения равны 0.

#include <iostream> 
#include <vector>
#include <cmath>

using namespace std;

bool isPrime(long n) 
{
    for(long i=2; i<=sqrt(n); ++i)
    {
        if(n%i==0)
            return false;        
    }
    return true;
}

int main()
{
    vector<long> primes(100);
    int index = 0;
    
    for(int i=2; i<=100; ++i, ++index)       
    {
        if(isPrime(i)) 
            primes.push_back(i);        
    }
    for(int x:primes) cout<<primes[x]<<"\t";
   
    return 0;
}

Ответы (1 шт):

Автор решения: Alexshev92
  1. В конструкторе вектора нужно убрать размер (100), потому что тогда мы сразу создаём вектор из 100 элементов, инициализированных 0.

  2. В цикле for(int x:primes) cout<<primes[x]<<"\t"; мы уже сразу итерируемся по элементам, поэтому primes[x], нужно заменить на просто x.

Как-то так

vector<long> primes;
int index = 0;

for(int i=2; i<=100; ++i, ++index)       
{
    if(isPrime(i)) 
        primes.push_back(i);        
}
for(int x : primes) 
    cout<< x << "\t";
→ Ссылка