试图从文件中获取随机素数的总和?

时间:2017-09-29 23:33:23

标签: c++ file variables nested-loops primes

我正在尝试从文件列表中读取随机数量的数字。根据这些数字,我需要确定数字本身是否为素数,然后我需要将所有素数加在一起得到它们的总和。

我遇到了这段代码的问题。我有点迷失在如何获得质量和存储它们的值,所以我可以将它们加在一起以获得它们的累积总和。我认为代码的这一部分将放在我的else if块中,但我并不是100%肯定。有人能指出我正确的方向和/或举个例子吗?如果我想获得他们的平均值,我可以用类似的方式获得他们的总和吗?

此外,从我的列表中提取了多个值,因此如果我使用单个变量来表示素数,那么变量会自动重置为每次整个循环迭代时它找到的下一个素数吗?

bool primeCalc()
{
    int number;
    bool primeValue = true;
    int i;
    while (inputFile >> number)
    {
        for (i = 2; i <= number / 2; ++i)
        {
            if (number % i == 0)
            {
                primeValue = false;
                break;
            }
            else if (number % i > 0)
            {
                // some code to store number value for sum; 

            }
        }
}

2 个答案:

答案 0 :(得分:2)

为什么要存放它们并浪费空间?这样做是因为他们来自流,像这样:

int sum = 0;
while(inputFile >> number)
{
  if(isPrime(number))
    sum += (number);
}

其中isPrime可以是此原型的函数:bool isPrime(int number);,如果true为素数则返回number,否则为false。

答案 1 :(得分:0)

首先,你不必检查数字/ 2,检查直到数字的平方根就足够了。也就是说,替换

for (i = 2; i <= number / 2; ++i) {
    // stuff
}

for (i = 2; i <= sqrt(number); i++) {
    // stuff
}

你不需要else语句。只需定义一个整数变量,就可以在if语句中积累素数,如:

if(primeValue) acc+=number;

for循环后面的while循环。您还需要在for循环之前将whileValue设置为true,并在while循环中再次设置为。

如果你想要这些数字的平均值,你可以使用一个计数器并在积累总和的地方递增,在while循环之后,你可以用计数器除以总和。