protected List<Integer> getAllPrimes() {
		boolean[] sito = new boolean[N];
		mapa = new int[N];

		for (int i = 1; i < sito.length; i++) {
			sito[i] = true;
			mapa[i] = 1;
		}

		ArrayList<Integer> list = new ArrayList<Integer>();

		for (int i = 0; i < sito.length; i++) {
			if (sito[i]) {
				int i1 = i + 1;
				list.add(i1);
				// mapa se ne dira jer je već označena s 1

				int x = 2;
				int j = (i1 * x);
				while (j <= N) {
					sito[j - 1] = false;
					mapa[j - 1]--;// oduzmemo sve višekratnike

					x++;
					j = (i1 * x);
				}
			} else if (mapa[i] == -1) {
				mapa[i] = 2; // postavimo oznaku da se treba ukoniti

				int i1 = i + 1;
				// dodamo sve višekratnike
				for (int j = i1 * 2; j <= sito.length; j += i1) {
					mapa[j - 1] += 1;
				}
			} else if (mapa[i] == 1) {
				mapa[i] = 3; // postavimo oznaku da se treba dodati

				int i1 = i + 1;
				// oduzmemo sve višekratnike
				for (int j = i1 * 2; j <= sito.length; j += i1) {
					mapa[j - 1] -= 1;
				}
			}

			// printMap2(i, mapa);
		}

		return list;
	}