从“跳入C ++”一书中练习

时间:2013-07-28 14:04:16

标签: c++

我开始使用Alex Allain的“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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

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

希望这会有所帮助:)