分享
三行代码  ›  专栏  ›  技术社区  ›  Avinash kumar

我的代码中是否有任何错误,因为它没有给出正确的输出[关闭]

  •  -3
  • Avinash kumar  · 技术社区  · 1 周前
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    using namespace std;
    typedef long long int ll;
    void prime_sieve(vector<int> p, int n)
    {
        //first mark all odd number's prime
        p[2] = 1;
        p[1] = p[0] = 0;
        for (int i = 3; i <= n; i += 2)
        {
            p[i] = 1;
        }
        //sieve
        for (ll i = 3; i <= n; i += 2)
        {
            //if the current number is not marked (it is prime)
            if (p[i] == 1)
            {
                //mark all the multiples of i as not prime
                for (ll j = i * i; j <= n; j = j + i)
                {
                    p[j] = 0;
                }
            }
        }
        //special cases so e have to mention then individually
    }
    int main()
    {
        int n;
        cin >> n;
        vector<int> p(n + 1);
        prime_sieve(p, n + 1);
        for (int i = 0; i <= n; i++)
        {
            if (p[i] == 1)
                cout << i << " ";
        }
        return 0;
    }
    

    我找不到它为什么不输出任何东西。有谁有同样的问题吗??

    #endif
        ::operator delete(__p);
          }
    
          size_type
    

    错误就在那个删除处(\u p)。我不明白为什么会发生这个错误

    1 回复  |  直到 1 周前
        1
  •  0
  •   john    1 周前

    有向量越界错误(和其他错误)

    void prime_sieve(vector<int> p, int n)
    

    n 是向量的大小。那么你有这个

    for (int i = 3; i <= n; i += 2)
    {
        p[i] = 1;
    }
    

    n个 p[i] i 等于 .

    for (ll j = i * i; j <= n; j = j + i)
        p[j] = 0;
    

    p[j] j 等于

    你也有其他问题,例如你正在按值传递向量,所以你对它所做的更改 prime_sieve main

    最后,因为你可以得到向量的大小 p.size()