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
 1/15 anonim ***** válasza:

először is, sztem a while ciklusba te n==1et akarsz.


pl 2 esetén 2%2 az 0, 2/2 az 1, és kiírja a 2est.


a második felét nem értem nagyon hogy mit akarsz, de egy kapcsoszárójel lemaradt az tuti. viszont sztem a prímszámokkal kellene végigmenni, az első while ciklushoz hasonló módon. nemtudom miért van ez a for 2 meg for 3 benne.

2014. jan. 19. 22:37
Hasznos számodra ez a válasz?
 2/15 A kérdező kommentje:
Leírnád hogy te szted hogy lenne ja a program? A 2 forral keresni akartam a prímszámokat de valamiért nem megy. Köszi a segítséget
2014. jan. 19. 22:42
 3/15 anonim ***** válasza:
jaa, látom azt szeretnéd, hogy ne csak egymás után írja, hanem kiírja hatványként hogy hányszor van meg benne a 2 a 3 stb... hát elég messze van a programod ettől még. pl nézd meg a 8 esetét. csak kiírná hogy 2*2*2* (az én javastalommal meg 2*2*2). csak úgy tudnék segíteni ha megírnám helyetted, de sajna nem értek annyira a c-hez :)
2014. jan. 19. 22:42
Hasznos számodra ez a válasz?
 4/15 anonim ***** válasza:

hát valahogy úgy csinálnám, ha jól emlékszem a matekra, a lényeg az, hogy 2-től kezdve el kell kezdeni osztogatni a prímszámokkal a számunkat.


num=18 (pl)

prim=2


tehát, lenne egy nagy while(num==1){

itt keresnénk egy prim, vagy a rákövetkező prímszámot. első esetben prim==2, szal meg is találtuk.


valami olyasmi hogy:

bool megtalalta=false;

while(megtalalta==false){

bool correct=true;

for (int i=2;i<prim/2;i++){

if (prim%i==0)

correct=false;//találtunk egy számot ami osztható a prímmel maradék nélkül szal prim az nem prím szám!

}

if (correct==false)

prim++;//nezzuk a köv számot!

else

megtalalta=true;

}


itt elvileg van egy jó prím számunk. először a kettő, aztán a 3, aztán az 5, stb...


szóval most ezzel a prím számmal kell megcsinálni, amit te a kettővel csináltál


printf(prim+"^");

int hanyadik=0;

while(num%prim==0)

{

num=num/prim;

hanyadik=hanyadik+1;

}

printf(hanyadik);//így persze lehet hogy kiírja azt is hogy pl 2^0 ami 1 szal nem gáz.


}



elvileg valami ilyesmi, de nem teszteltem, és nehéz így programozni hogy 5 sorom van amit egyszerre látok :D

2014. jan. 19. 22:58
Hasznos számodra ez a válasz?
 5/15 anonim ***** válasza:
jajbocs, már most látom hogy a while ciklus végén kell egy prim=prim+1, így ugye először prim 2 volt, mostmár ez 3 lesz, aztán 4, de rájön hogy az nem jó, ezért megnöveli 5re, stb...
2014. jan. 19. 22:59
Hasznos számodra ez a válasz?
 6/15 anonim ***** válasza:

mégegy hiba: for (int i=2;i<prim/2;i++){ helyett for (int i=2;i<=prim/2;i++){


így 3nál 2<=1 nem igaz, de 4nél 2<=2 már igaz, tehát meg fogja nézni azt hogy i az 2, és 4%2 az 0, szal rájön hogy a 4 nem jó.

2014. jan. 19. 23:02
Hasznos számodra ez a válasz?
 7/15 A kérdező kommentje:
Azt addig ertem hogy a hanyadik harvanyra emeled meg minden de hol keresi a primszamokat? Nagyon szepen koszi a segitseget
2014. jan. 19. 23:06
 8/15 anonim ***** válasza:

bool megtalalta=false;

while(megtalalta==false){

bool correct=true;

for (int i=2;i<=prim/2;i++){

if (prim%i==0)

correct=false;//találtunk egy számot ami osztható a prímmel maradék nélkül szal prim az nem prím szám!

}

if (correct==false)

prim++;//nezzuk a köv számot!

else

megtalalta=true;

}


itt!

Először indulunk a kettővel. prim==2. megnézzük hogy ez jó-e, ha nem, akkor növeljük eggyel.


akkor nem jó egy szám, ha találunk egy önmagánál kisebb, és egynél nagyobb számot, amivel osztható. Sőt, igazából nem is kell önmagánál kisebb, hanem önmagának a feléig is elég, hiszen pl 10 biztosan nem osztható 6al, hiszen 6*2 már nagyobb mint 10, szal érted...


így először kettővel osztogatjuk a számot, aztán amikor már kettővel nem osztható, de még mindig nagyobb mint 1 a szám, akkor 3mmal kezdjük el osztogatni. aztán 5el, stb...

2014. jan. 19. 23:11
Hasznos számodra ez a válasz?
 9/15 anonim ***** válasza:
egyébként most hogy belegondolok, nem is olyan fontos ez a csekkolás, hogy prím-e! hiszen, ha először osztogatjuk 2vel, aztán 3mmal, utána 4el megnézzük, 4el úgyse tudja elosztani, ha 2vel már nem tudta! ugyanez igaz a 6ra, 8ra, 9re (ahol már 3mmal próbálkozott).
2014. jan. 19. 23:13
Hasznos számodra ez a válasz?
 10/15 A kérdező kommentje:
Ertem. Mar csak egy kerdesem lenne. A bool az egy utasitas vagy egyszeruen csak ugy nevezted el a valtozot? Nagyon szepen koszonom a valaszt tenyleg nagyon sokat segitettel.
2014. jan. 19. 23:20
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!