Pereiti prie turinio

Reiktų pagalbos su vienu uždaviniu (pradedantysis)


Rekomenduojami pranešimai

Nezinau su kokia kalba tau reikia, bet turiu panasu pavyzdi:

public static int countFactors(int p) {
   if (p < 2)
       return 0;
   int factorCount = 1, k = 2;
   while (p >= k * k) {
       if (p % k == 0) {
           factorCount++;
           p /= k;
       } else
           k++;
   }
   return factorCount;
}

Sis kodas suranda kiek pirminiu skaiciu reikia sudauginti, kad gautum nurodyta skaiciu. Pasikoreguok, kad issaugotu skaicius, kuriuos panaudojo. Sis kodas garantuoja, kad skaiciai bus didejimo tvarka, tad nereikia ne atlikti patikros, kad nebutu mazejimo.

Redagavo Imago
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Niekaip nesuprantu ir nesugalvoju kaip jį padaryti.. Gal kas nors padėsite padaryti, arba bent paaiškinsite, tiksliau tariant užvesite ant kelio?

 

http://i.imgur.com/7uuZp8d.png

 

 

Na, jeigu reikia paaiskinimo: sudaugines pirminius skaicius gauti ta pati, kaip ir padalines is gauto rezultato pirminius skaicius. Taigi, kai duoda skaiciu, turi ieskoti mazesnio uz ta skaiciu(pvz uz 30), ir bandyti dalinti is 30, jeigu dalinasi be liekanos - tesi ir ieskai kito pirminio skaicio.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Imago duota funkcija turetu buti lengvai suprantama ir save paaiskinanti. Kad gautum reikiama koda, tiesiog toje funkcijoje 'factorCount' vietoje saugok 'k' i array ir turesi visus pirminius daugiklius didejimo tvarka:

 

pirminiaiDaugikliai($skaicius) {
   if ($skaicius < 2)
       return 'nera pirminiu daugikliu';
   $pirminiaiDaugikliai = [];
   $pirminisDaugiklis = 2;
   while ($skaicius >= $pirminisDaugiklis * $pirminisDaugiklis) {
       if ($skaicius % $pirminisDaugiklis == 0) {
           $pirminiaiDaugikliai[] = $pirminisDaugiklis;
           $skaicius /= $pirminisDaugiklis;
       } else
           $pirminisDaugiklis ++;
   }
   return $pirminiaiDaugikliai;
}

Redagavo Ispirit
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pagal tavo aiškinimą mažesnis už 30 tai pirmas kuris dalijasi 6, o ten atsakyme 5, tai kaip suprasti?

Cia reikia surasti pirminius (2,3,5,7,11,13...) daugiklius.

Pamegink isanalizuoti mano kodo logika:

public static int countFactors(int p) {
if (p < 2)
	return 0;
int factorCount = 1, k = 2;
while (p >= k * k) {
	if (p % k == 0) {
		factorCount++;
		p /= k;
	} else
		k++;
}
return factorCount;
}

 

Pakoregavus mano koda, turetum tikrinti:

 

Paimkim p=30.

p=30, k=2. tikrinam ar 30%2==0 (true). suradom dalikli. Irasom dalikli i atminti ir padalijam esama skaiciu is daliklio

p=15, k=2, tikrinam ar 15%2==0 (false). daliklis netinka, didinam per viena

p=15, k=3, tikrinam ar 15%3==0 (true). suradom dalikli. Irasom dalikli i atminti ir padalijam esama skaiciu is daliklio

p=5, k=3, tikrinam ar 5%3==0 (false). daliklis netinka, didinam per viena

p=5, k=4, tikrinam ar 5%4==0 (false). daliklis netinka, didinam per viena

p=5, k=5, tikrinam ar 5%5==0 (true). suradom dalikli. Irasom dalikli i atminti ir padalijam esama skaiciu is daliklio

p=1. pasiekem ieskoma rezultata.

 

isrinkus visus daliklius, kur gavom n%k==0, gaunam 2*3*5 = 30

Redagavo Imago
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...