我正在研究一个问题,以便找到2到100之间的素数。我的想法是:
1: Create a list of odd numbers up to 100
2: Use a nested loop to try and divide each number in the list
3: If the number is divisible, mark as -1 in the list (not a prime)
4: Print out all numbers that are not equal to -1
我知道有更有效的方法来找到这些素数,但我现在不在乎。
当我在嵌套循环中到达i == 4
时,它似乎被分配到-1,其中我期望该值是下一个奇数(9)。我不明白为什么会这样。这是我写的代码:
#ifndef EX10
#define EX10
#include <iostream>
#include <vector>
using namespace std;
class Ex10
{
public:
void Go()
{
vector<int> vecNums;
vecNums.push_back(2);
// Get all our test numbers.
for(int i = 3; i < 100; ++i)
{
if(i % 2 == 1)
{
vecNums.push_back(i);
}
}
cout << "Numbers filled" << endl;
// Loop through dividing numbers
for(int i = 0; i < vecNums.size(); ++i)
{
if(i == 4)
{
cout << "i " << vecNums[i] << endl; // Why is this -1?
}
for(int j = i+1; j < vecNums.size(); ++j)
{
if(vecNums[j] % vecNums[i] == 0 && vecNums[j] != -1)
{
//cout << "i " << vecNums[i] << endl;
//cout << "j " << vecNums[j] << endl;
//not a prime
vecNums[j] = -1;
}
}
}
cout << "Primes found" << endl;
for(int i = 0; i < vecNums.size(); ++i)
{
if(vecNums[i] != -1)
{
cout << vecNums[i] << endl;
}
}
}
};
#endif
提前致谢!
答案 0 :(得分:0)
在-1
和i == 2
时,它已更改为j == 4
。
答案 1 :(得分:0)
嗯,9不是素数。所以它在你的循环中第一次被设置为-1,就像它应该的那样。
if(vecNums[j] % vecNums[i] == 0 && vecNums[j] != -1)
在第一次通过你的外循环进入内循环的第四次迭代
if(vecNums[4] % vecNums[1] == 0 && vecNums[4] != -1)
评估为
if(9 % 3 == 0 && 9 != -1)
但是,你应该小心,因为一旦你在列表中得到-1,你就会做模数-1。这会给你带来难以置信的结果。如果vecNums [i] == -1
,则不需要运行内循环