Kezdőoldal » Számítástechnika » Programozás » C++ -ban hogyan lehet meghatár...

C++ -ban hogyan lehet meghatározni egy bekért szám legkisebb osztóját?

Figyelt kérdés

Az lenne a feladatom, hogy kérjek be egy számot, és lehetőleg for ciklussal határozzam meg ennek a számnak a legkisebb osztóját.

Bekérek egy számot, aztán egy ciklust ami 1-től a bekért számíg tart, és egyesével növelem, aztán egy feltételben meghatározom az osztókat, ha ez megvan, tovább bi a teendő????

Itt van ami megvan:

#include <iostream>


using namespace std;


int main()

{

int a;

cout<<"Adjon mge egy egesz szamot: ";

cin>>a;

for(int i=1; i<=a; i++){

if(a%i==0){


}

}


return 0;

}


A válaszokat előre is köszönöm :)



#programozás #C++ #programozásfeladat #Legkisebb osztó #Infoomatika
2019. júl. 7. 13:36
1 2
 11/18 anonim ***** válasza:
100%
A prímesre már kaptál választ, még javítom magam, 2-től a szám gyökéig elég menni, felesleges a feléig. Ha addig nincs találat akkor már csak önmaga lehet az osztója.
2019. júl. 7. 14:19
Hasznos számodra ez a válasz?
 12/18 anonim ***** válasza:
0%

Prímszám meghatározásához a gyökéig kell eljutni, ezt egy jobb képességű általános iskolás is kitalálta volna, még annak idején ezt a kérdést adták nekünk egy megyei matematika versenyen, a legtöbben kitalálták.


Végigiterálsz az összes prímszámon a kettőtől a szám négyzetgyökéig. De egyesével is lehet, meg el lehet menni egészen a végéig is, kis 8 jegyű prímszámok alatt még nem baj, csak feleslegesen tart sokáig:


for(int i = 2; i < a; i++){

if(a%i==0){

a = i;

}

}

cout<<a;

2019. júl. 7. 16:03
Hasznos számodra ez a válasz?
 13/18 anonim ***** válasza:

"Aha, értem, és ha ez egy pozitív szám, ami nem prím, akkor mit kell még csinálni, hogy kiírja a legkisebb osztót, ami nem az 1-es"


Ott van, megcsináltad. Ha azt kérdezed, mit kéne az if-be írni.. a kiíratást. Ennyi. Meg kilépni, hogy ne fusson tovább a ciklus. Ha belép abba az elágazásba, az azt jelenti, hogy talált osztót. Mi az osztó? i. Ezt kell kiírni.


Egyébként igen, a leghatékonyabb, ha a prímszámokon mész végig, de mivelhogy a prímek előállítása lassú, és kevés műveletet kell végezned egy iterációban (egy moduloszámítás, és egy feltételellenőrzés), ezért hacsak nem áll előre rendelkezésre megfelelő nagyságig az összes prímszám, egyszerűbb csak 2-től iterálni. Egy apró optimalizálás mondjuk, ami felezi az iterációk számát, ha 3-tól indítod a ciklust, és kettesével lépsz. Ennek oka, hogy a páros számokra fölösleges ellenőrizni, ha 2-vel nem osztható a szám, akkor 4-el, 6-el, stb. sem lesz az. Persze ehhez először külön le kell ellenőrizned, hogy 2-vel osztható-e, és ha nem, csak akkor indítod el a ciklust.

2019. júl. 7. 17:22
Hasznos számodra ez a válasz?
 14/18 anonim ***** válasza:

"prímek előállítása lassú"

Eratoszthenész szitája O(log n) időbonyolultságú, és mivel csak a gyökéig kell elmenni, ezért a tárbonyolultsága is O(log n). Ez nem elég gyors? Konstans időben akarod számítani?


Ide lehet, hogy nem kellene írni, úgyis csak azt pontozzák le, aki leírja a megfejtést...

2019. júl. 7. 17:35
Hasznos számodra ez a válasz?
 15/18 anonim ***** válasza:
O(n log n) idő* és O(log n) tár.
2019. júl. 7. 17:37
Hasznos számodra ez a válasz?
 16/18 anonim ***** válasza:
#15 Jogos, azt kihagytam a számításból, hogy csak sqrt(n)-ig kell futtatni az Eratoszthenészi szitát, ha n-ig kellene futtatni, akkor alapvetően csak magas műveletigényű iteráció esetén érné meg, így viszont lényegesen barátságosabb a szám.
2019. júl. 7. 18:02
Hasznos számodra ez a válasz?
 17/18 anonim ***** válasza:
2019. júl. 8. 08:46
Hasznos számodra ez a válasz?
 18/18 anonim ***** válasza:
#17 Ez legkisebb osztó, nem LNKO. Jó, hogy figyelsz.
2019. júl. 8. 12:35
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!