Twój algorytm jest błędny i dość dziwnie działa. ;p
Wydziel sobie sprawdzanie, czy liczba jest pierwsza do osobnej funkcji:
private static bool IsPrime(int n)
{
// do the magic things!
}
Potem możesz łatwo sprawdzić bez robienia zamieszania w funkcji głównej:
if(IsPrime(i)) Console.WriteLine("{0} jest liczbą pierwszą.", i);
Pamiętaj, że liczba pierwsza to taka, która jest większa od 1 i dzieli się tylko przez liczbę jeden i przez samą siebie (tylko i wyłącznie 2 dzielniki). Za każdym razem musisz sprawdzić (np. wyżej zaproponowanym rozwiązaniem funkcją), czy po drodze od jedynki nie ma czasem liczby, która przy dzieleniu da resztę z dzielenia równą 0, co dyskwalifikuje liczbę z nazwania jej pierwszą.
Nie mam pomysłu też na pokazanie od 1 do n tych liczb pierwszych.
Zgodnie z teorią liczb, liczba pierwsza to liczba naturalna większa od 1. Jedynka nigdy nie będzie oznaczana jako liczba pierwsza, więc bardziej sensownie będzie sprawdzać od 2 do n.
A przy okazji: masz możliwość używania argumentów programu, a z nich nie korzystasz!
int n = Convert.ToInt32(args[0]);
Użytkownik nie musi oczekiwać na prośbę o wpisanie n, tylko wpisać liczbę przy wywoływaniu programu.