gpt4 book ai didi

c++ - 素数计划

转载 作者:太空狗 更新时间:2023-10-29 23:23:09 24 4
gpt4 key购买 nike

我目前正在尝试一些问题来练习我的编程技能。 (还没有在学校或任何地方学习,自学)我遇到了这个问题,它要求我从给定的 txt 文件中读取一个数字。这个数字将是 N。现在我想找到 N <= 10 000 的第 N 个质数。找到它之后,我想将它打印到另一个 txt 文件。现在对于问题的大部分,我能够理解并设计出一种方法来获得 N。问题是我正在使用一个数组来保存以前找到的素数,以便使用它们来检查 future 的数字。即使我的数组大小为 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 文件代替数组。那可能吗?感谢您的帮助。

最佳答案

由于您的问题是关于编程而不是数学,所以我也会尽量保持这种回答。

第一眼看到你的代码让我想知道你到底在做什么......如果你阅读答案,你会发现他们中的一些人根本不屑于理解你的代码,而另一些人只是转储你的代码到调试器,看看发生了什么。是我们有那么不耐烦吗?或者仅仅是因为你的代码对于一个相对简单的问题来说太难理解了?

要改进您的代码,请尝试问自己一些问题:

  1. abc 等是什么?起个更有意义的名字不是更好吗?
  2. 您的算法到底是什么?你能用英文清楚地写下一段关于你正在做的事情吗(以准确的方式)?您能否将段落修改为一系列步骤,您可以在脑海中对任何输入执行这些步骤并确定它是正确的?
  3. 所有步骤都是必要的吗?我们可以结合甚至消除其中的一些吗?
  4. 有哪些步骤用英语很容易表达,但在 C/C++ 中却需要 10 多行代码?
  5. 您的步骤列表是否有任何结构?循环?可以将大的(可能重复的) block 放在一个带有子步骤的步骤中?

完成这些问题后,您可能会得到一个布局清晰的伪代码来解决问题,这很容易解释和理解。之后,您可以使用 C/C++ 或任何通用语言来实现您的伪代码。

关于c++ - 素数计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com