Ez az algoritmus jo szerintetek valoban, de akkor miert nem jon ki?
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
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
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:
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
>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?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
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.
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;
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
É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 <<<
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!