Kezdőoldal » Számítástechnika » Programozás » Tökéletes számok Javascriptben?

Tökéletes számok Javascriptben?

Figyelt kérdés

Azt a feladatot kaptuk, hogy amikor beírunk egy számot, a program kiírja, hogy tökéletes szám -e, vagy nem. Nagyon régóta szenvedek vele, tudnátok egy kicsit segíteni?

Előre is köszönöm!



2015. febr. 4. 18:20
 1/10 anonim ***** válasza:

Hol állsz éppen? Mi nem megy?

Nem tudjuk, hogy miben kell segíteni, a teljes kódot meg senki sem fogja megírni neked.

2015. febr. 4. 19:25
Hasznos számodra ez a válasz?
 2/10 SimkoL ***** válasza:

Az első tíz tökéletes szám a Wiki alapján: [link]

6

28

496

8128

33 550 336

8 589 869 056

137 438 691 328

2 305 843 008 139 952 128

2 658 455 991 569 831 744 654 692 615 953 842 176

191 561 942 608 236 107 294 793 378 084 303 638 130 997 321 548 169 216


Ezek után további gond? A 'nagyobbakat' egyszerűen már értelmezni sem tudod számként. Bepakolod egy string tömbbe őket, a továbbit rád bízom. De végül is számolgathatsz is, sok értelem nincs a fentiek alapján.

2015. febr. 4. 19:40
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

#2-nek igaza van abban hogy elég kevés "kicsi" tökéletes szám van, így egyszerűen csak le kell ellenőrizni hogy benne van az első 20-ban mondjuk, a fölött már több ezer karakter hosszúak ezek a számok. De szerintem azért kaptátok ezt a feladatot, hogy írjatok egy egyszerű algoritmust a tökéletes számok tesztelésére.


Ha a szám megegyezik a nála kisebb osztóinak az összegével, akkor tökéletes. Tehát a feladat hogy megkeresed az osztókat, összeadod őket és megnézed hogy egyenlő e a beírt számmal.


Legyen egy változód amiben tárolod az osztók összegét, majd keresd meg a szám osztóit úgy, hogy egy ciklussal végigmész az összes számon és megnézed hogy osztják e a bekért számot. Amikor találsz egy osztót, akkor az összeget megnöveled az osztóval. Amikor a ciklussal eléred a bekért szám felét (a felénél nagyobb valódi osztója nincs), kilépsz a ciklusból.


Pszeudokódban ez valahogy így néz ki:


bekér: szám

összeg = 0

ciklus i= 1-től szám/2-ig {

ha szám % i == 0 { összeg = összeg + i }

}

ha összeg == szám { kiír: "Tökéletes" }

egyébként { kiír: "Nem tökéletes" }


És ha nem is JavaScriptben, de itt egy működő megoldás (Python 3):

n = int(input('Írj be egy számot: '))

print('Tökéletes szám?', n==sum(i for i in range(1,n//2+1) if n%i==0))


Ennél nyilván vannak hatékonyabb megoldások és 100 milliós tartományban már elég lassú, de kezdetnek megfelel.

2015. febr. 4. 23:30
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

PHP-ban ez is egy megoldás:


$szam = $szam_masolat = 8128;


$osztok = array();


while(true) {


$osztok[] .= $szam;


if($szam <= 1) {

break;

}


$szam = ceil($szam / 2);


}


$eredmeny = array_sum($osztok);


if(($eredmeny / 2) == $szam_masolat) {

echo 'Tokeletes';

}

else {

echo 'Nem tokeletes';

}


JS-t annyira nem tudom... :(

2015. febr. 4. 23:44
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:

köszönöm szépen a segítséget, főleg a 3. válaszadónak!

jelenleg így áll, de nem azt csinálja, amit kéne..


<script language ="Javascript">

a= parseInt (prompt("Írjon be egy számot"))

osszeg = 0

for ( i=6; i<=a; i++) {

if ( a%i == 0) {osszeg=osszeg+i}

}

if ( osszeg == a ) {

document.write ("tökéletes szám");

}

else {

document.write ("nem tökéletes szám");

}

</script>


ha 1-et írok be, azt tökéletes számnak veszi, viszont semmi mást nem..

2015. febr. 5. 18:54
 6/10 SimkoL ***** válasza:

Nem olvastad át az egészet.


<script language ="Javascript">

a = parseInt (prompt("Írjon be egy számot"))

osszeg = 0

for ( i=0; i<=a/2; i++) {

if ( a%i == 0) {osszeg=osszeg+i}

}

if ( osszeg == a ) {

document.write ("tökéletes szám");

}

else {

document.write ("nem tökéletes szám");

}

</script>

2015. febr. 5. 19:10
Hasznos számodra ez a válasz?
 7/10 A kérdező kommentje:

mégis sikerült, el sem hiszem!

köszönöm szépen még egyszer a segítséget! :)

2015. febr. 5. 19:11
 8/10 A kérdező kommentje:
kicsit máshogy oldottam meg mint te, de köszönöm a választ:)
2015. febr. 5. 19:14
 9/10 anonim ***** válasza:

Az én megoldásom jobb és sokkal gyorsabb, mint a tietek. Ezt a számot is simán leellenőrzi: 137438691328


Nem minden számot ellenőrzök, hanem csak felezek és mindig felkerekítek, ezeket ha össze adom, akkor az ellenőrzendő számnak a duplájának kell kijönni, ha tökéletes.


Átírtam JS-re a PHP-t:


var szam = szam_masolat = parseInt (prompt("Irjon be egy szamot"));


var osztok_osszege = 0;


var ellenorzes = true;


while(ellenorzes) {

if(szam == 1) ellenorzes = false;


osztok_osszege += szam;


szam = Math.ceil(szam / 2);


console.log(szam);

}


if((osztok_osszege / 2) == szam_masolat) {

document.write('Tokeletes');

} else {

document.write('Nem tokeletes');

}

2015. febr. 5. 20:39
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

Kérdező:


A kódodban a hiba a ciklusod:

for ( i=6; i<=a; i++) {


Nem 6-tól hanem 1-től kell indulni, és nem szabad az "a"-t beleszámolni!

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


Még jobb ha csak a feléig mész el:

for ( i=1; i<=a/2; i++) {

2015. febr. 5. 21:39
Hasznos számodra ez a válasz?

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!