Здравствуйте! Решил написать программку для поиска простых чисел с помощью Решета Эратосфена. Изучив алгоритм я написал следующий код на С++
#include "stdafx.h"
#include <iostream>
#include <new>
#include <locale>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "russian"); //установка русского языка в консоли
int i, j; //индексы
int N; //размер массива
bool *mas; //объявляем массив типа bool
cout << "Простые числа от 1 до N \n";
cout << "Введите число N ";
cin >> S;
N=S+1;
mas= new bool [N]; //динамически выделяем память под массив размером N
for(i=1; i<=S; i++) mas[i]=true; //заполняем массив значением true;
//Алгоритм "Решето Эратосфена"
for(i=2; ((i^2)<=S); i++)
if(mas[i])
for(j=(i^2); j<=S; j+=i)
if(mas[j]) mas[j]=false;
//Вывод результата на экран
for(i=1; i<=S; i++)
if(mas[i]) cout << i << " ";
system("pause");
return 0;
}
Проблема в том, что выдает он какой-то "мусор", вместо простых чисел, да и к тому же почему-то mas[1] после выполнения алгоритма становится равным false.
Код:
Простые числа от 1 до N
Введите число N 100
3 5 9 15 21 33 39 41 45 51 53 59 63 69 75 81 89 93 99
Если поможете разобраться в чем я ошибся буду очень благодарен