Dwa proste programy sprawiające mi trudność

0

Cześć,

Jestem nowym użytkownikiem na forum i mam do Was pytanie odnoście dwóch kodów.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    long long int n;
    n>= 2 && n<=500000;
    long long int p[10000000];


    cin >> n;

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

    p[0] = 0;
    p[1] = 0;

    for(int i=2; i<=sqrt(n); i++)
    {
        if(p[i] == 1)
        {
            for(int j=i; j<=n; j++)
            {
                p[i*j] = 0;

            }

        }

    }

    for(int i=0; i<=n; i++)
    {
        if(p[i] == 1)
        {
            cout << i << " ";
        }
    }



    return 0;
}

Ten program ma na celu wypisanie wszystkich liczb pierwszych z zakresu. Problem w tym, że jeżeli jako n podam nieco większą liczbę to program się zawiesza. Chciałbym go jeszcze przerobić. Jeżeli podam jakieś n i będzie ono liczbą pierwszą to wypisze nam, która to liczba pierwsza z kolei. Wiem, że mogę do tego użyć kolejnej tablicy, ale nie mam pojęcia jak to zrobić.

Mam jeszcze jeden program do napisania, ale nie wiem kompletnie jak go złożyć. Wiem, że do tego muszę wykorzystać wzór na koło. Po skompilowaniu na ekranie powinno ukazać się koło.

Z góry dzięki za pomoc!

0
long long *p = new long long[x];
...
delete[]p;

?

0

Nie mieliśmy jeszcze znaczników, czy tam wskaźników.

1

long long int p[10000000]; tworzy tablicę o rozmiarze 80 MB na stosie, który ma pewnie z 1 MB, więc pewnie po podaniu większej liczby nadpisujesz coś innego albo piszesz po nieprawidłowej pamięci. W C++ powinieneś w tym celu użyć vectora:

#include <vector>
std::vector<long long int> p;
0

Zamieniłem Twój kod na semantycznie ekwiwalentny, tylko z std::vector zamiast C-tablicy + inicjalizacji jej jedynkami.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    long long int n;
    // to jest bez sensu, nie tylko nie ma zadnego efektu, ale tez jest UB,
    // bo czytasz niezainicjalizowana zmienna
//    n>= 2 && n<=500000;

    cin >> n;

    std::vector<long long> p(n, 1);

    p[0] = 0;
    p[1] = 0;

    for(int i=2; i<=sqrt(n); i++)
    {
        if(p[i] == 1)
        {
            for(int j=i; j<=n; j++)
            {
                p[i*j] = 0;
            }
        }
    }

    for(int i=0; i<=n; i++)
    {
        if(p[i] == 1)
        {
            cout << i << " ";
        }
    }

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1