运动有问题吗?

时间:2015-10-27 19:26:44

标签: c++

我正在对Stroustrup的书进行以下练习:

  

创建一个程序来查找1到100之间的所有素数。   有一种经典的方法可以做到这一点,称为“Eratosthenes的筛子”。   如果您不知道该方法,请上网并查找。使用这种方法编写程序。

我已经理解了练习,但是我在如何用C ++实现它时遇到了问题 这是到目前为止的代码:

typealias closureType = (inputTypes) -> (outputType)

您能否提供一些有助于我成功实施算法的建议?

注意:我可能会再次阅读本章。

2 个答案:

答案 0 :(得分:1)

if(MyListOfIntArrays.Any(MyArray.SequenceEqual)) Console.WriteLine("Yes"); else Console.WriteLine("No"); 向量不同,它在第一个循环中向后推回101次,并且获取大小为101,primi向量永远不会被推回,因此它保持为零大小。然后,在下一个循环中,当您尝试索引其元素时,"向量下标超出范围"抛出异常。

此外,像nonprimi这样的表达式是比较语句,除非它们位于numero == nonprimi[i];语句或if循环的括号内,否则不会完成任何操作。

考虑这个选择:

第二个while循环中的长if语句字面意思是,如果第一个数组中的数字(已填充了0到99之间的所有整数)是2,3,5或7或不能被2,3,5或7中的任何一个整除,然后将其添加到for向量中。

primi

答案 1 :(得分:0)

这是我的答案,不确定是否理想:

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    // Find the prime numbers from 2, 3, 4, 5, through 100
    // using Sieve of Eratosthenes
    
    vector <int> numbers;

    for (int i = 2; i <= 100; i++)
        numbers.push_back(i);

    int p = 0;  // index of "numbers"

    cout << "Prime numbers:\n";
    while (p < (numbers.size() - 1)) {
        int prime = numbers[p];

        for (int i = p + prime; i < numbers.size(); i += prime)
        {
            numbers[i] = -1;    // make all non-prime numbers less than zero
        }

        
        do {
            if (p < (numbers.size() - 1)) {
                p++;    // increase the index until you encounter a positive number
            }
            else
                break;
        } while (numbers[p] < 0);
        cout << prime << endl;
    }
    

}