【发布时间】:2016-05-12 14:45:30
【问题描述】:
numbers.txt 中有 1000 个数字,每个数字 2 到 9 位,每个数字单独一行。练习是计算有多少个数满足条件:分解后,这个数正好有 3 个不同的质因数,它们可以出现多次,而且都是偶数。
例如 105 - 因素:3, 5 ,7 - 是, 1287 - 因素:3、3、11、13 - 是,
1157625 - 因素:3,3,3,5,5,5,7,7,7 - 是,
55 - 因素:5、11 - 否。
#include <iostream>
#include <fstream>
using namespace std;
int number, threefnumbers=0;
int main()
{
ifstream file("numbers.txt");
ofstream outputf("results.txt");
int count_factors;
while (file >> number)
{
count_factors=0;
int factor=3;
if (number%2!=0)
{
while (number>1)
{
if (number%factor==0)
count_factors++;
while (number%factor==0)
{
number=number/factor;
}
factor+=2;
}
if (count_factors==3) threefnumbers++;
}
}
outputf << "59.1) " << endl << threefnumbers;
file.close();
outputf.close();
return 0;
}
我从 numbers.txt 中知道,有很多数字满足条件,但程序只返回 1。为什么会这样?
【问题讨论】:
-
“它们都是偶数”。您的示例数字都不是偶数!
-
不可能有偶数。素数总是奇数。
-
@A.Wabbi 2 是质数
-
题外话:节省大量计算并查找埃拉托色尼筛。缓存并重用结果。
-
@A.Wabbi 因子 将是素数(因此,除了 2,是奇数);被测试和分解的数字当然可以是偶数(或奇数)。