Проблеми при изпълнението на кода


0

Здравейте! Благодаря на всички които до сега ми помагаха със Java! Моля да ме извините ако не съм успявал на време да вляза във форума и да поблагодаря някого! Моля на следният въпрос да ми отговори човек който разбира именно от синтаксиса на Java! Благодаря! Въпросът е следният:

при запускането на кода по долу при присвояване на стойност  int num = 10000; (десет хиляди) всичко работи нормално и правилно , но когато присвоя на  int num = 100000;(сто хиляди) испълнението на кода замръзва и третият цикъл не се испълнява, моля обяснете защо е така и как да го поправя след като ми трябва да присвоя стойност  int num = 10000000; (десет милиона). Заданието е следното:

16. Напишете програма, която намира всички прости числа в диапазона
[1..10 000 000].

Ето го и кода: Линк

Фактически няма нищо сложно кода се състои от 3 for цикъла. Първият присвоява на всички 10 милиона стойност true! Вторият for цикъл избира на кои индекси от масива да остави true а кои да измени на false! След което се запуска третият for цикъл който извежда на конзолата всички елементи на масива които имат стойност true! Въпроса ми е защо при стоиност  int num = 10000; работи а при  int num = 100000; програмата замръзва и не работи! Моля подскажете как бих могъл да го поправя! Благодаря!




Отговори



2

Много тежка ти излиза програмата :)

Погледни ситото на Ератостен :)


от dentia (12519 точки)


0
dentia не разбирам какво значи сито!  Моля нкой да ми подскаже как бих могъл да подправя моят код по горе или да ми напише код който е най прост защото съм начинаещ! Благодаря ти за сайта който ми даде но незна как да го применя!

от Alexandr (4 точки)

2

Ами, като не знаеш - прочети го :)

Sieve of Eratosthenes

Твоят код не можеш да го поправиш, затова трбява да ползваш друг подход. В статията има готов java пример, ако потърсиш в Google "Sieve of Eratosthenes Java" ще ти излязат още много имплементации на алгоритъма.


от dentia (12519 точки)


0

Ето код, който може да разгледаш: http://pastebin.com/G4TE4HSg

Даваш число, до което искаш методът да гледа за прости числа. В случея методът връща булев масив, като ако на дадена позиция в масива има стойност true, то значи това е просто число. Индексите на масива играят ролята на самите числа.

За самият алгоритъм, ако освен да прочетеш какво прави те обърква, може да погледнеш това видео: https://www.youtube.com/watch?v=V08g_lkKj6Q

Поздрави. : )


от mbelev (2312 точки)


0

for (int i = 2; i < num; i++)
            {
                if (flag[i] == true)
                {
                    int j = i * i;
                    while (j < num)
                    {
                        flag[j] = false;
                        j += i;
                    }
                }
            }

И преди си работеше, просто по бавно.


от bstaykov (528 точки)