我目前正在尝试一些问题,只是为了练习我的编程技能。(还没有在学校或任何东西上学习,自学)我遇到了这个问题,需要我从给定的 txt 文件中读取一个数字。这个数字是 N。现在我想找到 N <= 10 000 的第 N 个素数。找到它之后,我想把它打印到另一个 txt 文件中。现在对于问题的大部分部分,我能够理解并设计一种获得 N 的方法。问题是我正在使用一个数组来保存以前找到的素数,以便使用它们来检查未来的数字。即使我的数组大小为 100,只要输入整数大约 < 15,程序就会崩溃。
#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 文件代替数组。那可能吗?任何帮助表示赞赏。