Kezdőoldal » Tudományok » Egyéb kérdések » Valaki kijavítaná nekem az...

Valaki kijavítaná nekem az alábbi programot? Nagyon hálás lennék

Figyelt kérdés

A feladat az hogy írjuk ki a számot törzstényezőire bontva.

pl: 18 kiír:2*3^2

Itt a program amit megírtam de valamiért nem működik.

Valaki ki tudná nekem javítani?

Előre is nagyon szépen köszönöm.


int n, i, j, k;

k=0;

printf("n=");

scanf("%d", &n);

while(n%2==0)

{

n=n/2;

if(n==0)

printf("2");

else

printf("2*");

}

for(i=3; i<=n-1; i++)

{

for(j=2; j<=n-1; j++)

{

if(i%j==0)

k=k+1;

}

if(k==0)

if(n%i==0)

{

n=n/i;

if(i==n-1)

printf("%d", i);

else

printf("%d*", i);

}



2014. jan. 19. 21:57
1 2
 11/15 anonim ***** válasza:
szívesen :) ja a bool az, lehet nincs c-ben. boolean, azaz logikai változó, két értéke lehet, igaz vagy hamis. helyettesítheted int-el is, vagy byte, ha olyan van. és a 0 lenne a false(hamis), az 1 pedig a true
2014. jan. 19. 23:40
Hasznos számodra ez a válasz?
 12/15 anonim ***** válasza:

Nem értem, hogy miért így csinálod.


1) Szükséged van az inputra (x) illetve annak a négyzetgyökére (sqrt_x).

2) Tudnod kell, hogy milyen prímekre teszteltél már, ehhez pedig építened kell egy listát, mondjuk egy array-t (d = [])


Elkezdesz szépen fölfelé haladni n=2-vel kezdve.

- Első kérdés: n értéke meghaladta-e sqrt_x-et? Ha igen, akkor nics értelme tovább vizsgálni, az utolsó x értéket be kell rakni az array végébe, és kiíratni az array-t. (persze rendezgetheted, hogy a 2*2*2*2 helyett 2^4-et írjon, de az a csicsázás, nem a lényeg.)

- Második kérdés: n osztója-e x-nek. Ha igen, akkor gyorsan elosztod vele, az eredményt beírod x helyére, n értékét meg elteszed az array következő pozíciójába. Tehát ha x==10 volt, akkor n==2 esetén x = 5 és d = [2] lesz. Az új x-re megint elkezded a fölfelé menést.

Ha viszont n nem osztója x-nek, akkor n=n++ , és kezded vizsgálni, hogy az vajon osztója-e. Tehát lényegében két egymásba ágyazott loop.


Namost elvileg le lehetne tesztelni az új n-eket-et, hogy prím-e, de ha alulról haladsz fölfelé és már "kigyűjtötted" a lenti prímeket, akkor mindig előbb kapsz prím osztót, mint nem prímet.


Ha a szám gyökéig nem kapsz osztót, akkor maga az input egy prím.


Tehát mondjuk az 56 esetében


n == 2, a gyöknél kisebb, osztó, tehát x új értéke 56/2 = 28. d == [2]

Újra kezded a ciklust x == 28, n == 2, újra osztó, d == [2, 2]

újra kezded x == 14-re, ekkor már d == [2, 2, 2] x == 7

Végül vizsgálod a hetet (ugye gyököt vonsz) 2-vel nem osztható, n==3, az meg már nagyobb a gyöknél, tehát a 7 prím, berakod az array végébe, kész: d == [2, 2, 2, 7].


Ha az 59-et kapod, akkor a gyöke 7,6, tehát n == 8-nál száll majd ki a program.

Kezdi az osztogatást n==2-vel, nem osztó, n==3, nem osztó, n==4, nem osztó, stb, n==8-ig nem talál osztót, tehát 59 prím.


Ennyi.

2014. jan. 19. 23:43
Hasznos számodra ez a válasz?
 13/15 anonim ***** válasza:
igen azt írtam, hogy nem is fontos vizsgálni hogy prím-e, csak mivel prímtényezős felbontásnak is nevezik ezt, ezért azon a vonalon indultam. De ettől eltekintve, két loop van egymásban :) azmeg, hogy a gyökéig még el vagy a feléig, csak optimalizálás kérdése (már ez a prímkeresésnél van, ha jól értem hiszen a prímtényezős felbontás maga az nem megy el addig úgyse...).
2014. jan. 20. 00:25
Hasznos számodra ez a válasz?
 14/15 anonim ***** válasza:

Előző: a felbontás és a prímkeresés ugyanaz a dolog. Ugyanis az utolsó tényező esetén mindig csak prímkeresés zajlik, hogy eldöntsd, hogy ez már az utolsó jegy-e. Márpedig nagy prímeknél azért a gyök elég sokat jelent, pl a 3571: nem mindegy, hogy 57-szer vagy 3571-szer futtatod a ciklust. Jó, valójában tényleg csak optimalizálás és tényleg csak nagyon nagy prímeknél lesz érezhető a különbség a mai számítógépek számítási kapacitása mellett, de azért jó az. ;)


Amúgy azért írtam ilyen hosszút én is, mert nem láttam, hogy van párbeszéd.

2014. jan. 20. 07:00
Hasznos számodra ez a válasz?
 15/15 anonim ***** válasza:
Gondoltam hogy gyököt írok, de a lényeg a kérdező segítése volt, és a kód megértetése, nem megírni helyette a feladatot. Nem hiszem, hogy ez a program egy hatalmas kiszolgálószerver, vagy játékprogram része lesz. :)
2014. jan. 20. 12:08
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!