В настоящее время я пробую ответить на несколько вопросов, чтобы попрактиковаться в своих навыках программирования. (Пока не брал его в школу или что-то еще, самоучка) Я столкнулся с этой проблемой, которая требовала, чтобы я прочитал число из заданного текстового файла. Это число будет равно N. Теперь я предполагаю найти N-е простое число для N <= 10 000. После того, как я его найду, я предполагаю распечатать его в другой текстовый файл. Теперь для большинства частей вопроса я могу понять и разработать метод получения N. Проблема в том, что я использую массив для сохранения ранее найденных простых чисел, чтобы использовать их для проверки будущих чисел. Даже когда мой массив был размером 100, при условии, что входное целое число было примерно <15, программа зависала. </p>
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
int main() {
ifstream trial;
trial.open("C:\\Users\\User\\Documents\\trial.txt");
int prime;
trial >> prime;
ofstream write;
write.open("C:\\Users\\User\\Documents\\answer.txt");
int num[100], b, c, e;
bool check;
b = 0;
switch (prime) {
case 1:
{
write << 2 << endl;
break;
}
case 2:
{
write << 3 << endl;
break;
}
case 3:
{
write << 5 << endl;
break;
}
case 4:
{
write << 7 << endl;
break;
}
default:
{
for (int a = 10; a <= 1000000; a++) {
check = false;
if (((a % 2) != 0) && ((a % 3) != 0) && ((a % 5) != 0) && ((a % 7) != 0)) // first filter
{
for (int d = 0; d <= b; d++) {
c = num[d];
if ((a % c) == 0) {
check = true; // second filter based on previous recorded primes in array
break;
}
}
if (!check) {
e = a;
if (b <= 100) {
num[b] = a;
}
b = b + 1;
}
}
if ((b) == (prime - 4)) {
write << e << endl;
break;
}
}
}
}
trial.close();
write.close();
return 0;
}
Я сделал это полностью, основываясь на своем руководстве по манекенам и сам, поэтому прощаю некоторую неэффективность кода и общее новшество моего алгоритма.
Также до 15 он правильно отображает простые числа.
Может кто-нибудь сказать мне, как мне следует улучшить этот текущий код? Я думаю об использовании TXT-файла вместо массива. Это возможно? Любая помощь приветствуется.