C++ 试图获取从文件中读取的随机素数之和?
我试图从文件中的列表中读取随机数量的数字。根据这些数字,我需要决定这些数字本身是否为素数,然后我需要将所有素数相加,得到它们的和 我的这段代码有问题。我对如何获取素数并存储它们,以便将它们相加得到它们的累积和有点迷茫。我想这部分代码会进入我的C++ 试图获取从文件中读取的随机素数之和?,c++,file,variables,nested-loops,primes,C++,File,Variables,Nested Loops,Primes,我试图从文件中的列表中读取随机数量的数字。根据这些数字,我需要决定这些数字本身是否为素数,然后我需要将所有素数相加,得到它们的和 我的这段代码有问题。我对如何获取素数并存储它们,以便将它们相加得到它们的累积和有点迷茫。我想这部分代码会进入我的else if块,但我不是100%确定。有人能给我指出正确的方向和/或给我举个例子吗?如果我想得到他们的平均数,我可以用类似的方法得到他们的总和吗 此外,还有多个值从我的列表中提取,因此如果我使用一个变量来表示素数,那么该变量是否会在每次整个循环迭代时将自身
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;
}
}
}
bool primeCalc()
{
整数;
布尔值=真;
int i;
while(输入文件>>编号)
{
对于(i=2;i 0)
{
//一些用于存储求和的数值的代码;
}
}
}
为什么要存储它们并浪费空间?从溪流中走出来,像这样做:
int sum = 0;
while(inputFile >> number)
{
if(isPrime(number))
sum += (number);
}
其中,
isPrime
可能是这个原型的一个函数:bool isPrime(整数)
,如果number
为prime,则返回true
,否则返回false。为什么要存储它们并浪费空间?从溪流中走出来,像这样做:
int sum = 0;
while(inputFile >> number)
{
if(isPrime(number))
sum += (number);
}
其中,
isPrime
可能是这个原型的一个函数:bool isPrime(整数)
,如果number
为素数,则返回true
,否则返回false。首先,不必检查数字/2,直到数字的平方根足够为止。即更换
for (i = 2; i <= number / 2; ++i) {
// stuff
}
在while循环内的for循环之后。您还需要在for循环之前将primeValue设置为true,然后在while循环中再次设置为true
如果你想要这些数字的平均值,你可以使用一个计数器,在累加和的地方增加它,在while循环之后,你可以将和除以计数器。首先,你不必检查数字/2,直到数字的平方根足够为止。即更换
for (i = 2; i <= number / 2; ++i) {
// stuff
}
在while循环内的for循环之后。您还需要在for循环之前将primeValue设置为true,然后在while循环中再次设置为true
如果你想要这些数字的平均值,你可以使用一个计数器,在累加和的地方递增,在while循环之后,您可以将总和除以计数器。我强烈建议您编写一个函数,该函数接受一个数字,并根据该数字是否为素数返回true或false,您不需要存储它们。只需测试当前数字是否为素数。如果是,则将其添加到总数中。您可以改进初始测试。您只需在
i*i时进行测试,我强烈建议您编写一个函数,该函数接受一个数字,并根据该数字是否为素数返回true或false,您不需要存储它们。只需测试当前数字是否为素数。如果是,则将其添加到总数中。您可以改进初始测试。您只需要在实际函数返回int
时进行测试;您的示例原型返回bool
。太多的C代码?为什么不返回false代码>当您发现一个组合并且只返回true时代码>当所有候选因素都不是一个因素时结束?它简化了循环测试。如果您尽快返回,else
也变得不必要。您的实际函数返回int
;您的示例原型返回bool
。太多的C代码?为什么不返回false代码>当您发现一个组合并且只返回true时代码>当所有候选因素都不是一个因素时结束?它简化了循环测试。如果您尽快返回,else
也变得不必要。请注意,在每次迭代中计算sqrt(number)
不是一个好主意,尽管现代优化编译器可能会为您避免它。使用sqrt()
涉及到转换到double
、计算,以及转换回int
。请注意,在每次迭代中计算sqrt(number)
不是一个好主意,尽管现代优化编译器可能会为您避免。使用sqrt()
涉及到转换为double
、计算和转换回int
。