Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

PyCharm feladat 2

611
Sziasztok!

Egy olyan program megírására lenne szükségem, amely meghatározza a legkisebb számot ami osztható 1 és N között lévő összes számmal (maradék nélkül). (Fusson le akár N = 20-ra is.)

Például: a 2520 a legkisebb szám ami maradék nélkül osztható minden számmal 1 és 10 között, mert
2520 / 1 = 2520
2520 / 2 = 1260
2520 / 3 = 840
2520 / 4 = 630
2520 / 5 = 504
2520 / 6 = 420
2520 / 7 = 360
2520 / 8 = 315
2520 / 9 = 280
2520 / 10 = 252
Jelenleg 1 felhasználó nézi ezt a kérdést.
pycharm, pyhton
0
Felsőoktatás / Informatika

Válaszok

3
Az N változót a felhasználótól kérjük be mindig.
0

Sajnos a Pyton nem az én világom, de két megoldást javasolnék
a) brute force (sajna N növekedésével egyre nagyobb probléma van)
C# formában mellékelve - képpel

A másik lehetőség (csak leírás)
Az N-ből kiválasztod a prímeket, majd megvizsgálod, hogy az egyes prímeknek mi a legmagasabb hatványa N-et végigvizsgálva...
A prímek legmagasabb hatványainak szorzata megadja a keresett számot

pl. N=10 esetén
1 - nem kell vele foglalkozni
2 - `2^1`
3 - `3^1`
4 - `2^2`
5 - `5^1`
6 - `2^1*3^1`
7 - `7^1`
8 - `2^3`
9 - `3^2`
10 - `2*5`
amely alapján a szám: `2^3*3^2*5*7=2520`
0

Szita módszerrel (vagy legalábbis ami ugyanazon az elven alapul, mint Eratoszthenész szitája) :

https://tio.run/##VY/dagIxEIWvk6cYhEJSl7pb74S9KXgl@AIiJeKo47qJZIeCeZs@Sx9smx9r26vMnJP5zsz1xidn5@O4hhaaupZDcD4YTl2siU2sLjSw8sYeUb1WsJ42WsurJ8tqssKwR96hBQNDML3rFpMK8qCWB@eBgCyU2QtaVRy9kCIC@sjOwoa2WchE94HcYXCQfiRaerUUP5s9t1mRIuHPv3iaNhX8zxB0gNJuzlt4gpLZQp1N8XBmszvzvsPS475Heyu35NjHxW/E2EX167M3f/yXHfF7TD/ySWk9jt8

Mivel a Python 3 nagy méretű int-ekkel is tud számolni, működik ez a kód akár 100-ig is, mint a fenti link mutatja (ahhoz már 136 bites aritmetikát használt). 22-ig elég 32 bit is.

Beleraktam print-eket, hogy látszódjon, hogyan működik. Amikor a "prim" értéke 1, akkor persze felesleges az újabb ciklus belül, hogy osszon vele, kihagyhatod egy if-fel. Lehetne még kicsit gyorsítani, hogy a belső ciklus is szitával menjen, de így is elég gyors.
Azt majd rakd bele te, hogy kérje be N értékét.
2