ý tưởng thuật toán:
Sử dụng 2 mảng 1 chiều là d và nt.Trong đó d sẽ lưu các biến đếm.
và nt để lưu các số nguyên tố.
thuật toán sử dụng phép chia lấy dư của 1 số với các số nguyên tố để xác định xem sô cần tính có phải là số nguyên tố.n
vì số nguyên tố lớn hơn 2 là số lẻ nên bước nhảy sẽ là 2.
vd :
d0 là 3 và nt0 là 3
xét 5 lúc này d0 = d0-1 = 2;
vậy 5 là số nguyên tố. Lưu 5 vào nt1. lúc này d1 = nt1 = 5;
xét 7: lúc này d0 = d0-1 = 2-1 = 1;
d1 = d1-1 = 5-1 = 4;
vậy 7 cũng là số nguyên tố. d2 = nt2 = 7.
xét 9 d0 = 0 => 9 không phải là snt.d0 = 3, d1 = 3, d2 = 6.
Tuy ý tưởng thuật toán của mình là như thế nhưng khi thực hiện lại không ra được kết quả như trên.

Bước lặp khi dl = 0 thì dl = nl không được thực hiện.
Mong được sự giúp đỡ của mọi người.
Thanks all.

Code:
using System;

namespace primes
    { // program for find primes between 1 and n.
    class Program
    {    public  static void Main()
        {           
            int[] nt = new int[100], d = new int[100];             
           d[0] = 3;
            nt[0] = 3;// 3 is primes => n[0] is 3 . 
            int n = 1;
            for (int i = 5; i < 111; i += 2)
            {               
                for (int l = 0; l < n; l++)
                { if (d[l] != 0)
                    {
                        d[l]--  ;
                        Console.Write("{0} ", d[l]);                     
                    }                    
                  else
                    {
                        d[l] = nt[l] ;
                       Console.Write("{0} ", d[l]);
                        for (int a = l + 1; a < n; a++)
                        {
                            d[a]--;
                            Console.Write("{0} ", d[a]);
                        }
                        Console.WriteLine();
                        goto resume; 
                    }                
                }
                Console.WriteLine();
                nt[n] = i;
                d[n] = i ;                
                Console.Write("{0} ", d[n]);
                n++;
            resume : ;
            }
            for (int m = 0; m < n; m++)
            {
                Console.Write(" {0}", nt[m]);
            }
            Console.ReadKey();            
        }
    }  
}