首页 / 更多教程 / c – Prime数字程序
c – Prime数字程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – Prime数字程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2353字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试一些问题,只是为了练习我的编程技巧. (没有把它带到学校或其他任何东西,自学)我遇到了这个问题,要求我从给定的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文件代替数组.那可能吗?任何帮助表示赞赏.
解决方法:
既然你的问题是关于编程而不是数学,我会尽力保持我的答案.
第一眼看到你的代码让我想知道你到底在做什么……如果你读到了答案,你会发现其中一些人并不愿意理解你的代码,有些人只是把你的代码转储到调试器看看发生了什么.难道我们不耐烦吗?或者仅仅是因为相对容易的问题,您的代码难以理解?
要改进代码,请尝试自问一些问题:
>什么是a,b,c等?提供更有意义的名字不是更好吗?
>你的算法究竟是什么?你能用英文写下一个清楚写的段落,说明你在做什么(以一种确切的方式)?您是否可以将段落修改为一系列步骤,您可以在任何输入上进行精神上的操作,并确保它是正确的?
>所有步骤都必要吗?我们可以结合甚至消除其中的一些吗?
>哪些步骤易于用英语表达,但需要超过10行的C/C++?
>您的步骤列表是否有任何结构?循环?大的(可能是重复的)块可以作为一个步骤与子步骤放在一起?
在完成问题之后,您可能会有一个清晰的伪代码来解决问题,这很容易解释和理解.之后,您可以用C/C++实现伪代码,或者实际上是任何通用语言.
内容总结
以上是互联网集市为您收集整理的c – Prime数字程序全部内容,希望文章能够帮你解决c – Prime数字程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。