我开始使用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;
}
}
}
答案 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”。
希望这会有所帮助:)