Здравствуйте! Решил написать программку для поиска простых чисел с помощью Решета Эратосфена. Изучив алгоритм я написал следующий код на С++
#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
Если поможете разобраться в чем я ошибся буду очень благодарен  
