我正在尝试一些问题,只是为了练习我的编程技巧.(没有把它带到学校或其他任何东西,自学)我遇到了这个问题,要求我从给定的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;
}
Run Code Online (Sandbox Code Playgroud)
我这完全基于我的假人指南和我自己这样做,所以请原谅我的算法的一些代码效率低下和一般新手.此外,对于最多15个,它会正确显示素数.
谁能告诉我如何改进当前的代码呢?我正在考虑使用txt文件代替数组.那可能吗?任何帮助表示赞赏.
Pol*_*ker 16
既然你的问题是编程而不是数学,我会尽力保持我的答案.
第一眼看到你的代码让我想知道你到底在做什么......如果你读到了答案,你会发现其中一些人并不愿意理解你的代码,有些人只是把你的代码转储到调试器看看发生了什么.难道我们不耐烦吗?或者仅仅是因为相对容易的问题,您的代码难以理解?
要改进代码,请尝试自问一些问题:
a,b,c,等?提供更有意义的名字不是更好吗?在完成问题之后,您可能会有一个清晰的伪代码来解决问题,这很容易解释和理解.之后,您可以在C/C++中实现伪代码,或者实际上是任何通用语言.