Milyen osztót kell alkalmazni, hogy a maradék érdekes legyen?
Van néhány nagy, mondjuk 12-24 számjegyű általános, véletlenszerű szám.
Hogyan lehet olyan osztót találni hozzájuk, hogy a maradék érdekes legyen. 7-10 számjegyű osztó, maradék.
Érdekes a maradék, ha pl.:
kerek szám, 1-2 számjegy+nullák
1 v. 2-féle számjegyből áll (váltakozva)
sorban növekvő, ill. csökkenő számjegyek
- szóval olyan, ami ránézésre könnyen megjegyezhető, mert spec.
Példák (szám, osztó1-2, maradék):
312190173402122873, 515746862, 605316670, 333333333
283202450198951312, 396801008, 713714039, 100000000
219528166359397171, 427252650, 513813469, 123454321
120091645083589884, 657293157, 182706367, 314159265 (pi)
Van-e valami módszer ilyen osztó keresésére, vagy csak a végigpróbálgatás? Mindig van ilyen, esetleg több ilyen osztó?
Valószínűleg mindre van megfelelő matematikai módszer, csak mindre másik.
Egyenként kéne végignézni.
Tetszik a téma, csak sajnos most nincs időm utánaszámolgatni, így szégyenkezve várom én is a megoldásokat.
Szerintem ki kéne pécézni elsőnek egy verziót, mondjuk ismétlődő szakaszos tizedes tört mint maradék.
A gond már ott kezdődik, hogy "érdekes". Ami az egyik embernek az, a másiknak nem.
Ott folytatódik, hogy mi a megfelelő motiváció a keresésre.
Ezután jön, hogy van-e elegendő ismert a kereséshez.
Végül, ha már mind összejött, általában felteszik a kérdést: mi a haszna? (közkeletűen, mire jó nekem). És erre csak kevesen tudnak értelmes választ.
Ez az oka annak, hogy kevés a vállalkozó.
#2: "érdekes": ha túl általánosnak tűnik, akkor vedd fixen úgy, ahogy megadtam.
motiváció, mi a haszna? : tanulnék belőle
Ennek feltétele a hasznos válasz, ami, ha nem is valószínű, nem tartottam kizártnak.
Haszontalannak tűnő dolgokból, pl. a pí sok billió számjegyének, vagy nagyon sok/nagy prímszámnak a kiszámítása, is lehet jó, hasznos következtetéseket levonni.
(számjegyek, ill. prímek eloszlása)
@Wadmalac
Valamit félreértettél vagy ha nem akkor nem tudom hogy gondoltad. Itt maradékos osztásról van szó.
Vagyis amit a kérdező ír pl. 312190173402122873 = 515746862*605316670 + 333333333
@Kérdező
"Hogyan lehet olyan osztót találni hozzájuk, hogy a maradék érdekes legyen."
Ez azért félreérthető mert egész számok körében akkor osztója egy szám a másiknak, ha maradékos osztással elosztva vele 0 a maradék. A kongruens szó lett volna a megfelelő.
Az hogy mi az hogy érdekes maradék, ezt nem tudom megfogni, mint ahogy egy valaki ki is fejtette már. Jó hír azonban, hogy e nélkül is meg lehet oldani. Mint tudjuk, hogy példát írni rá könnyű mert csak veszünk 2 számot, hozzáadunk annyit amennyi maradékot akarunk és a maradékhoz és a számhoz megvan a megfelelő osztó. Viszont ha az a kérdés, hogy milyen másik osztó van hozzá akkor már "bajba" vagyunk. Illetve ha csak a "semmiből" kapunk egy számot és egy maradékot na akkor mond meg, hogy mikor jön ki ez a maradék! Ez esetben a megoldás visszavezethető az osztók keresésre. Úgy hogy n szám esetén n-modulo (maradék) számnak az osztóit keressük és ezek közül nekünk a modulo-nál nagyobb osztók kellenek, hiszen ekkor és csak ekkor fog teljesülni, hogy annyi legyen a maradék amennyit akartunk, de az is lehet hogy ez sose teljesül. Az osztók keresésén meg lehet gyorsítani a brute force-nál gyorsabb, ha az osztók keresését visszavezetjük a prímfaktorizációra. Itt a próbaosztást gyorsíthatjuk úgy hogy elég csak a prímekkel elvégezni, hiszen ha egy számmal osztható ami összetett akkor ennek a számnak a prímtényezőivel is osztható lesz, ellenkező esetben meg azokkal sem. Természetesen a négyzetgyökéig kell nézni maximum, hiszen ha a négyzetgyökénél nagyonobb prímtényezője van akkor bizotsan van négyzetgyökénél kisebb prímtényezője. Kis prímekkel érdemes még bepróbálni a gyorsítás miatt, a nagyobbakkal meg Pollard Rho Brent prímfaktorizációval, de persze lehet más különböző prímfaktorizációt is használni melyekről matematikus szakos szakdolgozatot is láttam már régebben. Ugye ez nagyon kemény feladat is lehet még géppel is, a különböző prímfaktorizációs gyorsító algorimtusokkal is, bár elég jó eredményt hoz ki a sima brute force-hoz képest. A prímtesztelésre érdemes Miller-Rabin prímtesztel ellenőrizni hogy prím e, gyorsabb mint prímtényezőjét keresni, hogy van e neki. Amikor megvannak a prímtényezők akkor ezekből kell képezni az összes szorzatot melyek mindegyike úgy van előállítva hogy el van hagyva valami a prímtényezők közül, kivéve amikor mind szerepel.
Egy online futtatható python kód hozzá : [link]
Használati utasítás:
STDIN-hez beírni szóközzel elválsztva az adott számot és az osztót, az Exceute-al lefuttatni és megkeresi az összes ilyen számot.
Pl.:
Bemenet:
283202450198951312 100000000
Kimenet:
198400504
396801008
713714039
1427428078
2854856156
5709712312
11419424624
17700153131184457
35400306262368914
70800612524737828
141601225049475656
283202450098951312
Nem én találtam fel a meleg vizet, feltüntettem, hogy melyik kódrészlet honnan származik, kivéve amit én írtam hozzá. Pl. a primesbelow függvény az a kis prímeket állítja elő gyorsítás miatt Eratosztenészi szitával egy stackoverflow-ról származó kód.
"@Wadmalac
Valamit félreértettél vagy ha nem akkor nem tudom hogy gondoltad. Itt maradékos osztásról van szó."
Bocsánat, tényleg törtet írtam, hülye beidegződés miatt. De ismétlődő számsort akartam.
"De ismétlődő számsort akartam."
Ha a periodikusan ismétlődő csupa nullákat is belevesszük akkor mindig ismétlődik. Ha meg a szokásos módon nem vesszük bele, akkor meg abban az esetben nem ismétlődik, ha 10^n-szerese a hányadosnak egész szám (ahol n tetszőleges pozitív egész).
Aki ért hozzá az tudja hogy így miért jobb, hogy egyetlen sort átraktam a kódba (a main-be keresd): [link]
Egyébként az előző se számol se lassabban se rosszul.
#4: Köszönöm!
Közben már én is rájöttem, hogy ez milyen egyszerű:
az adott számból csak kivonom a kívánt maradékot, és faktorizálom.
Ha van olyan prímtényező, ill. ezeknek szorzata, ami nagyobb, mint a kívánt maradék, és legfeljebb 10-jegyű, akkor jó.
Pl: n=416689440590993531
for i in range(11,23):
o=i*10**7//99
print(o,end=':')
factu(n-o)
----------------------
1111111:416689440589882420= 2^2*5*19*1096551159447059 t: NEM
1212121:416689440589781410= 2*5*@13113391*3177587251 t: JÓ
1313131:416689440589680400= 2^4*5^2*61*101*169083525641 t: JÓ
1414141:416689440589579390= 2*5*23*6607*@335941*816239 t: JÓ
1515151:416689440589478380= 2^2*5*47*@746873*593523449 t: JÓ
1616161:416689440589377370= 2*5*41668944058937737 t: NEM
1717171:416689440589276360= 2^3*5*11*17*@243109*229144723 t: JÓ
1818181:416689440589175350= 2*5^2*131*761*3109*26888453 t: JÓ
1919191:416689440589074340= 2^2*5*@3747589*5559433553 t: JÓ
2020202:416689440588973329= 3*59*73*32249008636249 t: NEM
2121212:416689440588872319= 3*11*229*51427*1072190321 t: JÓ
2222222:416689440588771309= 3^3*@125639*122835602353 t: NEM
Elég sok maradékhoz található megfelelő osztó. (@:Pollard Rho módszerrel kapott 64k-nál nagyobb osztó)
Ezt nem értem.
Mi az a factu?
"t: NEM" "t: JÓ" mik ezek?
"Ha van olyan prímtényező, ill. ezeknek szorzata, ami nagyobb, mint a kívánt maradék, és legfeljebb 10-jegyű, akkor jó."
"1616161:416689440589377370= 2*5*41668944058937737 t: NEM"
Ha ezt adom inputnak : 416689440589377370 1616161 akkor nem sorolom fel az összeset, de kiadja megoldásnak 12626952745083673 ezt is ami 17 jegyű ami van legalább 10 jegyű.
Ha 416689440589377370 - 1616161 kivonod vagyis 416689440587761209 1616161 lesz az input akkor ott van megoldásnak pl. 52086180073268131
De ha 416689440589377370 + 1616161 veszed vagyis
416689440590993531 1616161 akkor megoldás pl a 83337888117875474. Egyszerűen nem is értem mi az hogy nem jó. Miért nem jó?
"Mi az a factu?" : a faktorizáló eljárásom neve
Pl: n=416689440590993531 a véletlen szám, ebből kivonom az "érdekes" maradékot, 1616161-et, így
n-1616161 = 416689440589377370-et kell faktorizálni, ami
416689440589377370= 2*5*41668944058937737
vagyis "t: NEM" = tehát nem lehet hozzá 7-10 számjegyű osztót találni (2. sorban kikötöttem).
"t: JÓ" = tehát jó, azaz, van olyan prímtényező, ill. ezeknek szorzata, ami nagyobb, mint a kívánt maradék, és 7-10 számjegyű.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!