Kezdőoldal » Számítástechnika » Programozás » Ez az algoritmus jo szerintete...

Ez az algoritmus jo szerintetek valoban, de akkor miert nem jon ki?

Figyelt kérdés

0 es 100 kozott kitalalja hogy mire gondoltunk,ha megadjuk Z3 Z5 Z7 nek a maradek osztasasat

Harom maradek osztasa Z3

Ot.................Z5

....

ezeket megadjuk es ez szerint kikene jonni a szamnak amit gondoltunk:


Number := (70*Z3 + 21*Z5 + 15*Z7) mod 105;


a pelda szerint Z3: 0 Z5: 0 Z7: 7 akkor a Numer 15

de 0 at kapok :S


pl. ha 1/0/7 akkor 70 et kapok


2015. jan. 21. 22:49
1 2
 1/16 anonim ***** válasza:
70*0+21*0+15*7 mod 105 az bizony nulla, hiszen 15*7 az pont 105.
2015. jan. 21. 22:56
Hasznos számodra ez a válasz?
 2/16 tabaki ***** válasza:

Szerintem értelmetlen zagyvaság, amit írtál. Nem lehetett volna pontosan idemásolni vagy belinkelni, miről van szó?

#1 bemutatta, hogy a 0 eredmény helyes. Ha mást vártál, akkor az algoritmus hasznavehetetlen. Tehát egyéb magyarázatot egyelőre nem szükséges keresni.

2015. jan. 22. 01:23
Hasznos számodra ez a válasz?
 3/16 anonim ***** válasza:

Valóban ahogy felettem is írták az algoritmusod egy zagyvaság, ha algoritmusnak lehet nevezni.


Először is had szögezzem le hogy ezt nem fogod megúszni ciklus nélkül, úgyhogy a legegyszerűbb az lenne ha 0-tól 100-ig végigmennél a számokon és megnéznéd hogy melyikre igaz hogy 3-al, 5-el, 7-el osztva Z3, Z5 és Z7-et ad maradékul, de úgy látom hogy egy hatékonyabb megoldást keresel.


A hatékonyabb megoldást úgy hívják hogy kínai maradéktétel:

[link]


Megpróbálom egyszerűen vázolni a helyzetet egy példával. Legyen a számunk x=53. Ekkor amit tudunk:

x ≡ 2 (mod 3)

x ≡ 3 (mod 5)

x ≡ 4 (mod 7)


Mivel a 3, az 5 és a 7 is prím, felírhatjuk úgy hogy:

x ≡ 5*7*A + 3*7*B + 3*5*C (mod 3*5*7)

x ≡ 35*A + 21*B + 15*C (mod 105)

ahol

35*A ≡ 2 (mod 3)

21*B ≡ 3 (mod 5)

15*C ≡ 4 (mod 7)


Ezt mondja ki a tétel, innentől a te dolgod hogy számolod ki az A-t, B-t és a C-t. A legegyszerűbb ha próbálkozol, vagy brute-force megoldással végigmész rajta.


Hogy ne hagyjam itt befejezetlenül, kiszámolom:

35*A ≡ 2 (mod 3) A=?

35*1 mod 3 = 2, tehát A=1


21*B ≡ 3 (mod 5) B=?

21*1 mod 5 = 1,

21*3 mod 5 = 3, tehát B=3


15*C ≡ 4 (mod 7) C=?

15*1 mod 7 = 1,

15*4 mod 7 = 4, tehát C=4


Lehet látni hogy most szerencsém volt és viszonylag hamar, 1 vagy 2 lépésből kijöttek a számok. A trükk az volt hogy az 1-et fel tudtam szorozni annyival mindig, hogy a megoldás jöjjön ki. Van amikor nem ilyen egyszerű és végig kell próbálni az összeset. Vissza az eredeti kongruenciára:

x ≡ 35*A + 21*B + 15*C (mod 105)

x ≡ 35*1 + 21*3 + 15*4 (mod 105)

x ≡ 158 (mod 105)

x ≡ 53 (mod 105)

tehát kijött hogy x=53. Megjegyzem hogy az x 0 és 104 között lesz, ezért nem biztos hogy kisebb mint 100.

2015. jan. 22. 02:50
Hasznos számodra ez a válasz?
 4/16 anonim ***** válasza:

>a pelda szerint Z3: 0 Z5: 0 Z7: 7 akkor a Numer 15


Amúgy 7-el osztva hogy adhat bármi is 7-et maradékul? o_O

15 mod 3 = 0

15 mod 5 = 0

15 mod 7 = 1

Még a példa is rossz? Vagy félreértettem volna valamit?

2015. jan. 22. 03:21
Hasznos számodra ez a válasz?
 5/16 anonim ***** válasza:

Visszaellenőrizve a számolásomból amúgy helyes a képleted csak amit írtál előtte és utána értelmetlen.


35*A ≡ Z3 (mod 3)

2*A ≡ Z3 (mod 3)

4*A ≡ 2*Z3 (mod 3)

A ≡ 2*Z3 (mod 3)


21*B ≡ Z5 (mod 5)

B ≡ Z5 (mod 5)


15*C ≡ Z7 (mod 7)

C ≡ Z7 (mod 7)


Tehát A=2*Z3, B=Z5, C=Z7.


Visszahelyettesítve:

x ≡ 35*A + 21*B + 15*C (mod 105)

x ≡ 70*Z3 + 21*Z5 + 15*Z7 (mod 105)


A probléma hogy szerintem nem tudod mit csinálsz, ha 7-el osztasz legfeljebb 6 lehet a maradék és a példád sem stimmel.

2015. jan. 22. 06:36
Hasznos számodra ez a válasz?
 6/16 A kérdező kommentje:

Azert nem masoltam be mert szlovak nyelvu a pelda.


(Lazarusban)Meg volt adva az hogy ha pushbutton-re kattintva mit vegezzen el a program ez meg volt adva a peldaban. Ha helyessen tettuk be a edit,label - okat akkor nem volt semmi mas dolgunk vele,mert ugy volt megadva a kod.


:

procedure TForm1.Button1Click(Sender: TObject); //vznikne po dvojkliku na Button1 vo formulári

var Zvysok3, Zvysok5, Zvysok7, MysleneCislo: integer; //deklarácia použitých premenných

begin

Zvysok3 := StrToInt (Edit1.Text); //vstup hodnôt potrebných k výpočtu

Zvysok5 := StrToInt (Edit2.Text);

Zvysok7 := StrToInt (Edit3.Text);

MysleneCislo := (70*Zvysok3 + 21*Zvysok5 + 15*Zvysok7) mod 105; //výpočet podľa vzorca

Label4.Caption := 'Myslel si si číslo ' + IntToStr (MysleneCislo); //vypísanie výsledku

end;


[link]

2015. jan. 22. 10:38
 7/16 anonim ***** válasza:
Van egy olyan érzésem, hogy ez nem a te munkád... jól sejtem?
2015. jan. 22. 21:55
Hasznos számodra ez a válasz?
 8/16 A kérdező kommentje:
"meg volt adva a peldaban" !
2015. jan. 22. 22:53
 9/16 tabaki ***** válasza:

És az miért baj, ha szlovák nyelvű? Nem, mintha egy kukkot is tudnék szlovákul, de annyit ki tudtunk volna silabizálni belőle, hogy te másoltad ki rosszul a példaként felhozott értékeket, vagy eredetileg sem voltak helyesek. A kódrészlet alapján máris rekonstruálni lehet a programot, és abból az derül ki, hogy az algoritmus működik, az általad beírt 0,0,7 érték viszont hülyeség, ami lehet, hogy az eredeti példa hibás szedésének köszönhető. Így utólag érthető: a gondolt szám 3-mal, 5-tel és 7-tel való osztásának maradékát kell megadnod. Ez 15 esetén mennyi is?


15 \ 3 = 5, maradék: 0

15 \ 5 = 3, maradék: 0

15 \ 7 = 2, maradék: 1

A képlet szerint: (70*0 + 21*0 + 15*1) \ 105 = 0, maradék: >>> 15 <<<


[link]

2015. jan. 23. 00:53
Hasznos számodra ez a válasz?
 10/16 tabaki ***** válasza:

Ja, most látom, ez lemaradt:

[link]

[link]

2015. jan. 23. 01:30
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!