abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 1
včera 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 5
včera 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 0
včera 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
včera 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
1.12. 15:16 | Komunita

Na GOG.com začal zimní výprodej. Řada zlevněných her běží oficiálně také na Linuxu. Hru Neverwinter Nights Diamond lze dva dny získat zdarma. Hra dle stránek GOG.com na Linuxu neběží. Pomocí návodu ji lze ale rozběhnout také na Linuxu [Gaming On Linux].

Ladislav Hagara | Komentářů: 1
1.12. 13:14 | Bezpečnostní upozornění

Byla vydána verze 2.7.1 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Řešeno je několik bezpečnostních problémů. Aktualizován byl především Tor Browser na verzi 6.0.7. Tor Browser je postaven na Firefoxu ESR (Extended Support Release) a právě ve Firefoxu byla nalezena a opravena vážná bezpečnostní chyba MFSA 2016-92 (CVE-2016-9079, Firefox SVG Animation

… více »
Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 759 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Java - metoda opak. ctvercu

ahad!3l avatar 15.10.2010 15:40 ahad!3l | skóre: 6
Java - metoda opak. ctvercu
Přečteno: 1190×
Zdravim. Dostal jsem za ukol napsal program v Jave, ktery ma umocnit cele zadane cislo. V Jave nemam zadne zkusenosti, takze si ani s takovou trivialni veci bohuzel nevim rady. Chtel bych nekoho proprosit, kdyby by me mohl postrcit. Cele zadani zni takto:

Napište funkci, která umocní zadané celé číslo a (typu long) na b (typu long) ve zbytkové třídě Zn; vše jen pomocí násobení. Vstupem funkce jsou hodnoty a,b,n; výstupem je a^b (a na b; POZOR v jave je to XOR) v Zn (opět typu long). K umocnění použijte metodu opakovaných čtverců. Funkci použijte v programu, který z klávesnice načte hodnoty a, b (b>=0), n (n>1); vypočte a^b (umocní a na b) v Zn a výsledek vypíše.

Počítání ve zbytkové třídě Zn (modulo n) je takové, že na výsldek aplikujete modulo n (tj: a+b v Zn = (a+b)%n; a*b v Zn = (a*b)%n atd.)


A nasledne vysvetlivky:
1. Inicializujeme pomocnou proměnnou x=1.
2. Mocnitel (b) se zapíše v binárním kódu (např. 11 dekadicky se zapíše binárně jako 1011); mezi znaky binárního kódu vepíšeme znak s (s jako square; např. pro 11 dekadicky, tedy 1011 binárně, je to 1s0s1s1).,
3. Tuto posloupnost procházíme zleva doprava, pokud narazíme na 1, vynásobíme x hodnotou a; pokud narazíme na 0 neděláme nic; pokud narazíme na s umocníme x na druhou (uděláme čtverec). Všechny zmíněné operace jsou modulo n (tedy %n). Poté, co projdeme celý řetězec, je v proměnné x uložen výsledek.

* Řetězec (např. 1s0s1s1) nemusíme vytvářet, je jen pro představu. NEPŘIJÍMÁM úkoly s použitím řetězců. Metodu implementujeme pomocí cyklu, jehož tělo se bude opakovat maximálně tolikrát, kolik je bitů v příslušném datovém typu.

Postupuji zatim dobre?
package dcv4;

public class Zn {

	
	public static void main(String[] args) {
		java.util.Scanner jc = new java.util.Scanner(System.in);
		
		System.out.printf("Zadejte n: ");
		
		
		long a, b = 1011;
	int n;
	int x = 1;
	
	if (a^b) {
    if (b>=0, n>1) {
	}
Dekuji za kazdou radu.

Odpovědi

15.10.2010 15:56 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Myslím, že nepostupuješ. Jestli zkoušíš to 1011 z příkladu, tak to je jen binárně zapsané číslo 11 (jedenáct), nikoli tisíc jedenáct. Také se mi nezdá a^b, proč to tam je? Asi bys měl procházet číslo b po jednotlivých bitech a podle hodnoty daného bitu pracovat s číslem x.
15.10.2010 19:45 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Zkus sem hodit něco, co bude přeložitelné... v prvním if není výsledkem boolean, n nemáš inicializované, co znamená ta čárka v druhém if?
Překladač ti nikdy neřekne: "budeme kamarádi"
16.10.2010 11:48 x22
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Ono to nie je az tak trivialne. nasobenie mod long sa pocita blbo kvoli moznemu preteceniu. Cudujem sa, ze o tomto problem sa v zadani nepise, ked uz je tam celkom podrobny postup.

Zistit, aky je k-ty bit cisla b sa da zistit 2 operatormi (vysledok je rovno boolean).
16.10.2010 12:44 Marek
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
>pomocí cyklu, jehož tělo se bude opakovat maximálně tolikrát, >kolik je bitů v příslušném datovém typu Zdravim.

Mame (b)_10 = (b_p b_(p-1) ... b_1 b_0)_2

Skus sa zamysliet ako zo znalosti: (v dalsom (...) znamena v dvojkovej sustave)

a^(b_p ... b_1) mod n mozno vypocitat
  1. a^(b_p ... b_1 0) mod n
  2. b) a^(b_p ... b_1 1) mod n

Je to vlastne popisane v hinte 3.

Cyklus, ktory zbehne maximalne tolkokrat, kolko je bitov v reprezentacii datoveho typu pre b sluzi zase na to, aby sa dala zistit reprezentacia b v dvojkovej sustave zlava. (Vacsinou sa ide sprava, t.j. od poslednej cislice.)

Tieto dve veci treba dat dokopy a mas program.

Priklad:

a^6 mod n, predpokladame, ze datovy typ reprezentujuci 6 ma 4 
bity. Preto, 6 je reprezentovane ako 0101.

Na zaciatku mame a^(0) mod n = 1.

Zistime prvu cislicu 4-bitovej reprezentacie cisla 6:

0: -> pouzijeme postup, ako z a^(0) mod n -> a^(00) mod n

V dalsom kroku zistime 2. cislicu:

1: -> pouzijeme postup, ako z a^(00) mod n -> a^(001) mod n

3. cislica:

0: a^(001) mod n -> a^(0010) mod n

4. cislica:

1: a^(0010) mod n -> a^(00101) mod n

a mame vysledok. 

Snad to aspon trochu pomoze.

Marek

ahad!3l avatar 17.10.2010 13:59 ahad!3l | skóre: 6
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Moc dekuju za rady, ale je to na me stejne slozite. Javu jsem pred 2 tydny videl poprve. Jinak tady jde videt zadani asi lepe..
17.10.2010 18:28 vaki | skóre: 1
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Algoritmus je to pěkný, na pár řádků. Jeho obtížnost je pro začátečníky řekl bych střední.

Popis algoritmu v odkazovaném dokumentu je dostatečný. Dle zkušeností se však začátečník při pohledu na tento popis vyděsí a začne přemýšlet víc o tom co neví než o tom co ví.

algoritmus jsem si naprogramoval a i když nemám moc čas ho testovat zdá se být funkční. Nejprve se úplně vykašlete na načítání hodnot a zaměřte se na samotný výpočet tak, jak je popsaný v zadání.

Krok 1) Inicializovat proměnnou - tak to je snad jasné

Krok 2) Převést na binární číslo v textovém řetězci je zadavatelem zakázané, proto jediné co potřebujeme od toho kroku je zjistit kolik bitů vlastně dané čáslo zaujímá. Alternativou je použít konstantu Long.BITS ale v tom případě by se vždy testovali všechny bity. Nevím zda je zadavatelme přijatelné řešení kupříkladu níže popsaný převod. Nechám na Vašem uvážení

int pocetBitu=Long.toBinaryString(b).length()

Krok 3) Zde je třeba se zamyslet. Zadavatel výslovně zakázal používat řetězec. Přesto jsme schopni zjistit zda je na požadovaném místě binární reprezentace čísla b jednička nebo nula. Pro i-tý bit čísla si jednoduchým výpočtem 2 na i-tou vytvořte bitovou masku a jejich ANDem (operace & ) zjistíte zda je tam jednička nebo ne.

2a) je jednička? Pak podle popisu provede násobení x číslem a (avšak v modulu zn) tedy

x = (x*a)%zn;

2b) je nula? neděláme nic

2c) ještě musíme ošetřit stav 's', a při rychlém pohledu do řetězce v příkladu je jasné, že znak 's' následuje za každým znakem, kromě posledního. Tedy pokud pracujeme s jiným než posledním znakem, provedeme navíc krok x na druhou opět v modulu zn

x = (x*x)%zn;

Když takto projdeme všechny bity čísla b, máme v x uložený výsledek.

--- Algoritmus Vám samozřejmě mohu poslat, ale samotné řešení bez jeho pochopení Vám v dlouhodobém výhledu stejně nepomůže.
ahad!3l avatar 17.10.2010 19:47 ahad!3l | skóre: 6
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Pokud byste byl tak hodny, reseni by se mi hodilo. ( ahadiel@centrum.cz )
Alespon bych si to okoukal, ikdyz mi ve studiu nepomuze, to mate pravdu. ( ) Ja totiz moc nechapu celkove zadani. Umocneni se mi podarilo provest takto:
public class Mocnina {
    
    public static void main(String[] args) {
        java.util.Scanner in = new java.util.Scanner(System.in).useLocale(java.util.Locale.US);
        
        for (; ; ) {
            System.out.println("Zadej dvě celá čísla: ");
            int m = in.nextInt();
            int n = in.nextInt();
            int mocnina = 1;
            int nn = n;
            int mm = m;
            while (nn > 0) {
                if (nn % 2 == 1) {
                    mocnina = mocnina * mm;
                }
                mm = mm * mm;
                nn = nn / 2;
            }
            System.out.println(m + " na " + n + " = " + mocnina);
        }
    }
}
Ovsem nevim si rady s temi bity, zbytkovou tridou Zn. Celkove se mi zda, ze je to celkem neumerne nasim schopnostem, jelikoz 90% tridy v Jave pred 2 tydny teprve zacalo, vcetne me. Mam ale vybornou knizku, tak se snad moje schopnosti brzy rozsiri. Moc Vám děkuji za ochotu.
17.10.2010 19:54 vaki | skóre: 1
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Moje metoda pro mocinu:

public static long MetodaOpakovanychCtvercu(long a, long b, long zn){
		// zjistíme počet bytů mocnitele (parametr b)
		int pocetBitu = Long.toBinaryString(b).length();

		// inicializace výsledkové proměnné
		long x = 1;
		
		// procházení čísla
		for(int i=pocetBitu-1; i>=0; i--){			
			// Spočítáme bitovou masku pro i-tý bit
			long mask = Math.round(Math.pow(2, i));
			
			/* je-li i-tý bit čísla b 1 provedeme operaci pro znak '1'*/
			if((b & mask) == mask )
				x = (x*a)%zn;

			/* pokud se nejedná o poslední bit, provedem operaci znak 's' */
			if(i > 0)
				x = (x*x) % zn;
		}
		
		return x;
	}
ahad!3l avatar 17.10.2010 20:19 ahad!3l | skóre: 6
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Uff..no budu to muset prostudovat a nejak se s tim poprat. Tohle bych teda nezplodil. Dekuji, ze jste tam vlozil i komentare. Alespon vim, co jaky radek ma za ukol delat.
17.10.2010 20:27 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Lepší než
long mask = Math.round(Math.pow(2, i));
je
long mask = 1l << i;
Překladač ti nikdy neřekne: "budeme kamarádi"
17.10.2010 20:37 Radovan
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Hele, nejste z jedné třídy? http://forum.root.cz/index.php?topic=1056.0
Saljack avatar 19.10.2010 11:04 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: Java - metoda opak. ctvercu
Ha ha nejsi náhodou z FELu a tohle máš do algoritmizace :-D tohle jsme také dělali.
Sex, Drugs & Rock´n Roll.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.