-4

我通过使用 Alex Alllain 的《Jumping into C++》一书开始学习 C++,而我在一项练习中遇到了麻烦。练习文本如下:

设计一个程序,找出从 1 到 1000 的所有数,其质因数相加后总和为质数(例如,12 的质因数为 2、2 和 3,总和为 7,即质数) . 实现该算法的代码。

我写了一个代码,我认为它很好,但它不起作用。

但是,这里是代码:

#include <iostream>

using namespace std;


int main()
{
    for (int number = 2 ; number < 1000 ; number++)
    {
            int sum = 0;
            int something = number;
            if (primeNumber(number) == true)
        {
            sum = number;
        }
        else
        {
            while (something != 1)
            {
                for (int factor = 2 ; factor <= number; factor++)
                {
                    if (primeNumber(factor) == true)
                    {
                        while(something % factor == 0)
                        {
                            something /= factor;
                            sum += factor;
                        }
                    }
                }
            }
        }
        if (primeNumber(sum)== true)
        {
            cout << number << endl;
        }
    }
}
int primeNumber(int x)

{
    for (int i = 2 ; i < x; i++)
    {
        if (x % i == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}
4

1 回答 1

0

您的 primeNumber() 函数有问题 - 在 for 循环中,您不应该包含“else”语句。例如,设 x=9。然后当 i 从 2 开始时,我们 (x%i==0) 为 false - 因此根据您的代码,即使 9 是一个合数,该函数也会立即返回“true”。正确的代码应该是:

for (int i=2;i<x;i++)
if(x%i==0) return false;
return true;

这样,代码将检查 x 的所有可能因子,并且只有当 x 不是 2,3...或 x-1 的整数倍时,函数才会返回“true”。

希望这可以帮助:)

于 2013-07-28T14:36:47.233 回答