我目前正在开发一个查找质数的程序,我知道查找质数的方法比较复杂,但是我正在尝试比较矢量中的元素(not_prime_numbers和number bank(1-100之间的数字))当找到一个为质数的值时,将其放入最终的prime_number向量中。
我正在使用循环比较向量中的元素。当我要求程序显示矢量not_prime_numbers时,这不是问题,也不是数字库,但是,当我要求程序显示prime_number矢量时,我得到的误差矢量下标超出范围。为什么我要求素数中的向量元素超出范围,但是使用相同的循环方法来显示向量的元素not_prime_numbers&number_bank工作。我如何比较两个向量以将元素放入第三个向量(prime_numbers)是否存在问题?
#include "pch.h"
#include <iostream>
#include<vector>
int main()
{
float i = 1.0;
unsigned int n = 0;
std::vector<float>not_prime_numbers;
std::vector<float>number_bank;
std::vector<float>prime_numbers;
while (i <= 100.0)
{
for (float j = 1.0;j<(i);++j)
{
float p = i / j;
if (abs(floor(p)) == p&&j!=1.0)
{
not_prime_numbers.push_back(i);
break;
}
}
++i
}
for (float k = 1.0; k <= 100.0; ++k)
{
number_bank.push_back(k);
}
for (unsigned int m = 0; m <= number_bank.size(); ++m)
{
while (n <= not_prime_numbers.size())
{
if (not_prime_numbers[n] == number_bank[m])
{
break;
}
if (n == m)
{
prime_numbers.push_back(number_bank[m]);
}
if (not_prime_numbers[n] != number_bank[m])
{
++n;
}
}
}
std::cout << "All prime numbers between 0 and 100 are as follows:\n";
for (unsigned int j = 0; j <= prime_numbers.size(); ++j)
{
std::cout << prime_numbers[j] << "\n";
}
}
这不是家庭作业,只是个人练习。任何帮助将不胜感激。
答案 0 :(得分:1)
在
while (n <= not_prime_numbers.size()) { if (not_prime_numbers[n] == number_bank[m])
您要跟踪最后一个元素,测试必须为n < not_prime_numbers.size()
打印结果时出现相同的错误:
for (unsigned int j = 0; j <= prime_numbers.size(); ++j) { std::cout << prime_numbers[j] << "\n"; }
必须
for (unsigned int j = 0; j < prime_numbers.size(); ++j)
{
std::cout << prime_numbers[j] << "\n";
}
如果主机上有 valgrind ,请使用它来查找此类错误以及更多