現在、プログラミングスキルを練習するためだけに、いくつかの質問を試しています。(学校などでまだ取っていません、独学です)この問題に遭遇したため、特定の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ファイルを使用することを考えています。それは可能ですか?どんな助けでも大歓迎です。