NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Jiné napsání programu na hledání prvočísel

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

Aktivity
Avatar
Lukáš Maťa:29.9.2017 11:02

Ahoj ... chtěl bych se zeptat učím se JAVu a v knížce JAVA 8 výukový kurz jsem narazil na cvičení na zjištění prvočísel od 2- 100 . Program , který je uveden jako výsledek chápu = přikládám v obrázku, ale rád bych se zeptal, chtěl bych vědět jestli jde přepsat tak abych nemusel použít boolean , ale jestli by to šlo vytvořit jen pomocí příkazu for a pak pomocí podmínek if ..... když nad tím přemýšlím, tak jakkoukoliv podmínku if dám abych určil prvočíslo tak je to podmínka, která je splněná , ale já nevím jak ji napsat aby byla opačně.... jestliže NEBUDE splněna tak nepokračuj a dělej další číslo...... nevím jestli to takhle vůbec jde napsat a nemusím se na to dívat jako v uvedeném programu, kdy if dám jako false aby nebylo splněno s boolean.

Díky moc za radu Lukáš

 
Odpovědět
29.9.2017 11:02
Avatar
Peter Sciranka
Tvůrce
Avatar
Peter Sciranka:29.9.2017 12:00

Ahoj, neviem či to presne chápem, ale rozpísal som ti to ako najlepšie viem :)

// použitie if
// príklad 1
if(x > y)
{
    // tu vložíš kód, ktorý chceš aby sa spracoval, keď bude splnená podmienka(x>y)
}

// príklad 2
if(!(x > y))
{
    // tu vložíš kód, ktorý chceš aby sa spracoval, keď NEbude splnená podmienka(x>y)
    // táto podmienka sa dá tiež napísať ako if((x>y)==false), to znamená že podmienka platí ak x NIE je väčšie ako y
}

// KONKRÉTNE PRÍKLADY
//príklad1
if(5>3)
{
    vypis "podmienka platí"
}
VÝSLEDOK:
vypíše sa ti "podmienka platí"


//príklad 2
if((5>3)==false)
{
    vypis "podmienka NEplatí"
}
VÝSLEDOK:
nevypíše sa ti nič, pretože platí že 5>3


//príklad 3
if((2>3)==false)
{
    vypis "podmienka NEplatí"
}
VÝSLEDOK:
vypíše sa ti "podmienka NEplatí"

Dúfam, že ti to pomože, ak by ti to nebolo ešte jasné, tak napíš.

Nahoru Odpovědět
29.9.2017 12:00
Act as if it was Impossible to Fail
Avatar
Odpovídá na Peter Sciranka
Lukáš Maťa:29.9.2017 13:18

Tomuhle rozumím , ale ...

Pokud použiju tohle zapsání pro přepsání programu tak mi to bude dávat chyby na nekompatibilní int s boolean atd...

příklad int a,b;

for(a=0;a<100;a++)
{for(b=2;b<=(­a/b);b++)
if(!(a%b)==0)
System.out.prin­tln(a);}

jde mi o to jestli to jde takto jen pomocí podmínek zapsat aby to vybralo daná prvočísla a nehádali se podmínky, protože tím vstupuji do logické hodnoty

Tohle zapsání je špatně... jen ukázka představy a jestli to jde tímto způsobem nějak zapsat .....

Editováno 29.9.2017 13:20
 
Nahoru Odpovědět
29.9.2017 13:18
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovídá na Lukáš Maťa
Peter Sciranka:29.9.2017 16:48

Ahoj, už asi chápem čo sa pýtaš. Javu ešte neviem, ale v C# som to napísal takto:

for(int a = 3; a<100; a++)
{
    for (int b = 2; b<=(a/2+1); b++)
    {
        if(a%b == 0)
        {
            break;
        }
        if(b==(a/2+1))
        {
            Console.WriteLine(a);
        }
    }
}

Inak, existujú aj lepšie algoritmy na zistenie prvočísiel pozri tento odkaz .
Dúfam teda že som to pochopil správne a že ti to pomohlo.

Editováno 29.9.2017 16:50
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.9.2017 16:48
Act as if it was Impossible to Fail
Avatar
Odpovídá na Peter Sciranka
Lukáš Maťa:29.9.2017 21:11

Díky funguje .... akorát nechápu ten zápis ,proč toto b<=(a/2+1) a pak dole v if taky a/2+1

Můžu poprosit o slovní přepis této podmínky ? Díky

 
Nahoru Odpovědět
29.9.2017 21:11
Avatar
Lukáš Maťa:29.9.2017 22:30

Už jsem to pochopil = nebo přesnji dokážu to přečíst a pochopil jsem jak to funguje.
Ale jak jsi k takovému zápisu došel ? Nepochopil jsem, z čeho a podle čeho to zapsat právě takto hlavně druhý for .... b<=(a/2+1) ,, spodní podmínky jsou již pochopitelné
,

 
Nahoru Odpovědět
29.9.2017 22:30
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovídá na Lukáš Maťa
Peter Sciranka:29.9.2017 23:01

Ahoj, ten príklad hore som sa snažil napísať podľa vzoru ktorý si nahral v prvom príspevku,
existuje ale lepšie a efektívnejšie riešenie.
To čo robí program vyššie je, že vezme číslo "a" a postupne skúša čísla ("b") a ak nájde delenie bezozvyšku (a%b==0), tak to znamená, že sa jedná o prvočíslo. Skúša ale všetky čísla až do polovice čísla a, takže ak máme prvočíslo a = 97, tak skúša všetky čísla až do 97/2+1 = 48+1 = 49. (Každý programovací jazyk to má inak ohľadom toho ako sa zaokrúhľuje, C# to má tak, že 5/2 = 2, a teda 97/2 = 48, ale to tu nechcem hlbšie rozoberať). Toto počítanie je ale zbytočné dlhé, správne je nasledujúce:

Číslo "a" je v podstate možné napísať ako "druhá odmocnina a" krát "druhá odmocnina a".
Príklad:
Máme číslo a=100, druhá odmocnina zo 100 je 10.
Stačí na skontrolovať čísla "b" len do výšky tejto druhej odmocniny.
Je to preto, lebo:

  • 25 * 4 je to isté ako 4 * 25 a ak má byť nejaké číslo deliteľné bezo zvyšku (a%b==0), tak sa musí nachádzať v rozmedzí: 2 až druhá odmocnina daného čísla.

PRÍKLAD:

  • 100 / 2 = 50. To tiež znamená 100 / 50 = 2.
  • 100 / 3 = nie je deliteľné bezo zvyšku
  • 100 / 4 = 25 , 100 / 25 = 4
  • 100 / 5 = 20, 100 / 20 = 5
  • 100 / 6 = nie je deliteľné bezo zvyšku
  • 100 / 7 = nie je deliteľné bezo zvyšku
  • 100 / 8 = nie je deliteľné bezo zvyšku
  • 100 / 9 = nie je deliteľné bezo zvyšku
  • 100 / 10 = 10, 100 / 10 = 10

Ak máme číslo 100, tak toto číslo je deliteľné bezo zvyšku len číslami:

  • 2,4,5,10,20,25,50

Nám stačí len skontrolovať, či je dané číslo deliteľné bezo zvyšku celým číslom do výšky jeho druhej odmocniny, ak tomu tak nie je, jedná sa o prvočíslo.

Dúfam, že som to napísal aspoň trochu pochopiteľne, ak si predsa potreboval to ešte vysvetliť, tak len napíš :)
P.S.: kód s tou druhou odmocninou tu neudávam, môžeš si to vyskúšať sám, aspoň si to trochu precvičíš ;)

Editováno 29.9.2017 23:02
Nahoru Odpovědět
29.9.2017 23:01
Act as if it was Impossible to Fail
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 7 zpráv z 7.