1. Нам треба пройти 15 чисел (1-й цикл), кожне з них в циклі перевіривши на простоту (2-й цикл). Тобто 2 цикли - необхідно і достатньо.
2. Ви перевіряєте, чи ділиться число j на число l. Для цього треба просто перевірити залишок: if( j % l == 0 )...
3. Програма вкрай неоптимальна. Для перевірки на подільність достатньо перевірити, чи не ділиться число на прості числа (раніше отримані!), не більші за корінь з цього числа. Чому тільки прості, сподіваюся, зрозуміло; чому саме за корінь? Тому що якщо число x розкладається в добуток y*z, то хоча б одне з чисел y та z має бути не більше за sqrt( x ), інакше маємо протиріччя: x = y * z > sqrt( x ) * sqrt( x ) = x, тобто x > x.
Для того, щоб не користатися зайвий раз бібліотекою cmath (за принципом YAGNI) можна виразити умову sqrt( x ) > y як  x > y * y.
4. Давайте змінним зрозумілі імена.
5. Не використовуйте нестандартні функції (знову ж YAGNI), і не запитуйте вводу без пояснень.
Коротше:
#include <iostream>
using namespace std;
int main()
{
    const int primesToFind = 15;
    int primes[ primesToFind ], 
        primesFound = 0,
        candidate = 2;
    while( primesFound < primesToFind )
    {
        bool isPrime = true; // припускаємо, що наш кандидат - просте число
        for( int i = 0; 
             ( i < primesFound ) 
               && ( primes[ i ] * primes[ i ] <= candidate ) 
               && isPrime; 
             ++i )
        {
             isPrime = ( candidate % primes[ i ] != 0 );
        }
        if( isPrime )
        {
            primes[ primesFound++ ] = candidate;
            cout << candidate << endl;
        }
        ++candidate;
    }
    cout << "Press enter to continue..." << endl;
    cin.sync();
    cin.get();
    return 0;
}
Для подальшої оптимізації можна перевіряти тільки непарні числа чи тільки числа виду 6n±1.