将列和行中的质数打印到文件中

Print prime numbers in columns and rows to a file

本文关键字:打印 文件      更新时间:2023-10-16

>我创建了一个查找素数的函数,我需要帮助将这些数字写入格式良好的表中的文件中,其中包含列和行。我想我需要一些嵌套循环,但我不知道什么是最好的实现。这是我到目前为止的代码,希望你们能帮助我。谢谢

现在我的代码所做的是将数字 2 和 3 写入文件,然后它进入空行的无限循环。

该文件应如下所示:

2 3 5 11 13 17 19 23

29 31 37 41 43 47 53

一直到最接近 4000 的质数
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;

bool isPrime(int);
int main()
{
int counter = 0;
int currentNumber = 2;
ofstream outputFile("test.txt");
for (int i = 2; i < 4000; i++)
{
for (int row = 1; row < 4000; row++)
{
for (int col = 1; col <= 8; col++)
{
if (isPrime(i) == true)
{
outputFile << endl;
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
i++;
}   
}
outputFile << endl;
}
}
system("pause");
return 0;
}
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}

你离得太近了。只需数到 8 个素数并打印出一行新行,然后重置计数器直到下一个 8 个。您已经在循环内以及"for"行上复制了 i++,行和 col 的东西都是不必要的。

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int counter = 0;
ofstream outputFile("test.txt");
for (int i = 2; i < 4000; i++)
{
if (isPrime(i) == true)
{
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
counter++;
}
if (counter == 8)
{
outputFile << endl;
counter = 0;
}
}
return 0;
}

Richq 已经为您提供了更好的实现方法,但让我们看看您在代码中做错了什么(查看您的意图,并不总是它的作用(:

您的外环从 2 到 4000。然后为每个数字打印一个表格。(不是真的,因为您也在表中增加 i,但让我们忽略它。这有点不对劲。你只需要一个表,所以外循环必须去。不过,请保持int i = 2;

第二个循环:行从 1 到 4000,每行打印 8 个质数。但是您只需要小于 4000 的数字。显然,4000 * 8 个素数会更大。您不知道需要多少行表格。应改为i < 4000行的退出条件。

第三个循环:col 从 1 到 8。但也许在最后一行,我将在第 4000 个数字上超过 3。因此,如果我<4000 是一个硬限制(即使您已经达到 4000,也不会打印到行尾(,那么您需要将其包含在条件中:(col <= 8) && (i < 4000).

内部有2个问题:

  • 在每个质数之前打印一个新行。这就是为什么你在一行中得到一个 2 和 3,而不是在同一行中得到两个。
  • 仅当 i 是质数时,您才递增 i。所以在 2 和 3 之后,你的增量 i。但是你有 4,表格的其余部分只会测试 4 不是素数,什么也不打印。

将换行符移出内部循环。您只需在每行之后执行此操作。并且在行内始终递增 i。但只有在找到质数时才递增 col。

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;

bool isPrime(int);
int main()
{
int counter = 0;
int currentNumber = 2;
ofstream outputFile("test.txt");
int i = 2;
for (int row = 1; i < 4000; row++)
{
for (int col = 1; (col <= 8) && (i < 4000); i++)
{
if (isPrime(i) == true)
{
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
col++;
}   
}
outputFile << endl;
}
return 0;
}
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}