NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Prvočísla v daném rozsahu

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Matěj Vaňous:6.2.2017 9:22

Ahoj,mám tu menší problém. Potřebuji vytvořit program, kde uživatel zadá spodní a horní hranici a program má vypsat všechna prvočísla v rozsahu. Vůbec si s tím nevím rady. Předem děkuji za odpověď.

 
Odpovědět
6.2.2017 9:22
Avatar
Vojta Bereščák:6.2.2017 9:41

Zdravim. Rozloz si to na podproblemy:

  1. zadani dvou cisel
  2. porovnani jestli 1. je mensi nez 2.
  3. iterace od 1. k 2.
  4. metoda na zjisteni prvocisla

    a. teoreticky

    b. implementacne

  5. pokud ta metoda vrati true -> vypsani

Na vse se da dohledat na googlu navod. Pokud neco nedohledas, napis.

 
Nahoru Odpovědět
6.2.2017 9:41
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Matěj Vaňous
vajkuba1234:6.2.2017 9:43

Zkus kouknout zde:

https://cs.wikipedia.org/wiki/Prvo%C4%8D%C3%ADslo

nastuduj si, jak urcit prvocislo. No a pak v programu jednoduse osetris, ze se prvocilo zacne pocitat od minimalni hranice az do te maximalni. :)

Nahoru Odpovědět
6.2.2017 9:43
No hope, no future, JUST WAR!
Avatar
Petr
Člen
Avatar
Petr:6.2.2017 14:02

Co se tyka algoritmu pro hledani prvocisel tak se jeste pouziva https://cs.wikipedia.org/…vo_s%C3%ADto Je efektivnejsi nez pocitani odmocniny a nasledne deleni. Nicmene v tomto pripade kde je i dolni mez bude jeho efektivita nizsi a bude primo zaviset na nastaveni dolni meze, protoze algoritmus bude muset projit i cisla nizsi nez dolni mez.

 
Nahoru Odpovědět
6.2.2017 14:02
Avatar
Vojta Bereščák:6.2.2017 16:14

Jak popsal petr sito je dobry, rychly, nicmene docela slozity (v kontextu polozene otazky). To co je na wiki je postacujici a myslim ze zakomponovat to do kodu bude docela jednoduche.

 
Nahoru Odpovědět
6.2.2017 16:14
Avatar
PiskotPiskotovic:8.2.2017 18:15

Myslím že tento kód (jde o konzolovou aplikaci - takže to tu dávám spíše aby jsi lépe pochopil jak na to) sice není úplně ideální, no ale třeba to pomůže:

package prvocisla;

import java.util.Scanner;

public class Prvocisla {

        public static void main(String[] args) {
                @SuppressWarnings("resource")
                Scanner sc = new Scanner(System.in, "Windows-1250");

                System.out.println("Zadej, od kterého čísla chceš vypsat prvočísla:");
                int odcisla = sc.nextInt();
                System.out.println("Zadej, do kterého čísla chceš vypsat prvočísla:");
                int docisla = sc.nextInt();
                int zbytek = 0;
                int pocet = 0;
                System.out.println();
                for (int x = odcisla; x <= docisla; x++) {
                        pocet = 0;
                        for (int z = 1; z <= x; z++) {
                                zbytek = x%z;
                                if (zbytek == 0) {
                                        pocet = pocet + 1;
                                }
                        }
                        if (pocet == 2) {
                                System.out.print(x + ", ");
                        }
                }
        }
}

Myslím že se asi dá pochopit jak funguje, zkrátka:

1. Nejprve potřebuješ uložit rozsah do dvou integerů, to je snad jasné
2. Poté v si vytvoříš cyklus, ve kterém x na začátku (nebo jiný integer) = hodnota dolní hranice rozsahu a podmínka je, že x <= vrchní hranice rozsahu (snad chápeš proč <= a ne <, když by uživatel zadal číslo které je prvočíslem tak by se ani do cyklu nedostalo a nebylo by nakonec vypsáno)
3. V tom cyklu si vytvoříš další cyklus (třeba z, tak jak v kódu výše), který bude začínat jedničkou a podmínkou bude to, že z <= x (integerem z budeme dělit x (přes modulo %, který vrátí místo výsledku zbytek) abychom zjistili kolik má číslo x dělitelů beze zbytku)
4. Zjistíme zbytek při dělení integeru x integerem z přes modulo (jak jsem napsal výše, funguje stejně jako / akorát vrátí zbytek místo výsledku)
5. Pokud je zbytek 0, přidáme 1 do proměnné s počtem dělitelů (kterou musíme na začátku prvního cyklu nastavit na 0 a ještě před ním definovat)
6. Za tímto cyklem ale pořád v prvním cyklu zkontrolujeme, jestli jsou dělitelé pouze dva a není jich více, pokud ano - číslo se vypíše

Možná že jsem to popsal špatně (což je více než pravděpodobné), ale kód je funkční, takže máš alespoň příklad jak to může vypadat :)

Editováno 8.2.2017 18:17
Nahoru Odpovědět
8.2.2017 18:15
Error 404 - stránka motto.php nenalezena.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.