Учитывая, что 50 - это очень немного (50-е простое число всего лишь 229), можно придумать всё что угодно (даже ужасающе неэффективное). Можно просто перебирать все числа, начиная с двойки, и каждое делить на все меньшие его, начиная с двойки. Если хоть на одно разделится - не простое, иначе простое. Попутно подсчитывая число простых чисел, N-е найти не составит труда.
Псевдокод: ввод N i = 2 counter = 0 нц для j = 2..(i - 1) если i mod j = 0 тогда увеличить i на 1 следующая итерация внешнего цикла увеличить counter на 1 если counter = N тогда вывод i завершение работы программы увеличить i на 1 кц
Дальше можно изменять эту программу, оптимизировать. Например, известно, что меньший собственный делитель любого составного числа не превосходит корня из этого числа, следовательно, можно во внутреннем цикле делать перебор не до i - 1, а до [sqrt(i)]. Другое полезное наблюдение может заключаться в том, что все простые числа кроме 2 имеют вид 6m - 1 или 6m + 1 (остальные не подходят: очевидно, 6n делится на 6, 6n +-2 четные числа, а 6n + 3 делится на 3). Это наблюдение позволит примерно в три раза сократить число итераций внешнего цикла. Наконец, можно сохранять все встретившиеся простые числа в массив, и затем проверять, делится ли текущее число на простые числа, меньшие себя: если не делится, то оно - тоже простое. Для хранения 50 маленьких натуральных чисел в памяти не нужно много места. Можно воспользоваться каким-нибудь другим алгоритмом, например, решетом Эратосфена. Но в зависимости от того, на каком языке программирования будет потом реализовываться этот алгоритм, он может записываться нетривиально. Для выполнения "на бумажке" решето Эратосфена - один из самых удобных В конце концов, можно использовать "читерский" метод - взять откуда-нибудь первые 50 простых чисел, записать их куда-нибудь, а потом просто за O(1) находить нужное число в памяти.
#include <iostream>
using namespace std;
void main()
{
setlocale(0,"russian"); //для отображения русских символов в консоли
int a[8]={1,2,3,4,5,6,7,8}; //определение массива
int k,sum=0; //определение переменных
cout<<"введите к:"<<endl; //cout-вывод строки на консоль,endl-переход на новую строку(для удобства)
cin>>k; //cin-для ввода
cout<<"весь массив:"<<endl;
for(int i=0;i<8;i++) //цикл для прохода по каждому элементу от 0 до 7 включительно(т.к. в данном случае у нас 8 элементов)
{
if(a[i]%k==0) //проверяем на кратность текущий элемент массива
sum=sum+a[i]; //если кратно, считаем сумму текущего элемента массива с предыдущим результатом
cout<<a[i]<<" "; //выводим текущий элемент на консоль(для всех элементов)
}
cout<<endl<<"сумма элементов кратных 'k' равна "<<sum<<endl;//выводим результат
}
Объяснение: