Trečias uždavinys, šįkart neužteks tik pieštuko ir popieriaus

Komentarai Prisijungti

Viršuje:   Seniausi | Naujausi

Vytis M. 2016-01-11 12:43
Teisingai, čia prireiks didelių kompiuterio pajėgumų. Kadangi dabar per programavimo pamokas naudojam C++, ja ir aprašysiu sprendimą. Sprendimas
buntu1117 2016-01-11 18:13
Sveikinu, Vytį M. gražiai išspręsta, 17s, tikras programuotojas. Galima naudotis interneto resursais: einame į puslapį https://primes.utm.edu/nthprime/index.php#piofx į pirmą langelį įrašome 1000001 ir spaudžiame "submit query" ir po kokių 2s sužinome, kad 1000001-asis pirminis skaičius yra 15485867, tada 100000100/15485867=6,45750735. Atsakymas: 6,46 % Matematika - mokslų karalienė, skaičių teorija - matematikos karalienė. Pirminiai skaičiai turi dar daug neatskleistų paslapčių: http://www.vartiklis.lt/science/math/prime-numbers.htm
Vytis M. 2016-01-11 19:03
Ar tai reikėtų suprasti kaip pašaipą ? 17 sekundžių - čia ant mano naujo nešiojamo kompiuterio. O laiką galima sutrumpinti ir iki 7.328 s, nes pamiršau įtraukti tai, jog užtenka tikrinti nelyginius skaičius. Dabar jau pakenčiamos 7 sekundės ant mano nešiojamo kompiuterio mažiausiai reikalaujant kompiuterio resursų. O kad 2 sekundės truko toje svetainėje, tikėtina, kad jų serveriai kur kas galingesni. Aišku Jūs galite naudotis interneto resursais, bet tai tebus atsakymas be sprendimo, ir jis Jums neatskrietų iš oro jei dingtų internetas (tarkim esate egzaminuojamas)
buntu1117 2016-01-11 20:04
Vyčiui M. Ne, aš niekada iš kolegų nesišaipau. Priimu pastabą dėl interneto resursų. Pagalvosiu, ar galima apsieiti be interneto. Šiaip vis tiek mums reikia 1000001 -to pirminio skaičiaus, kurį galime arba apskaičiuoti, arba gauti iš interneto arba iš lentelių. Šiaip aš įsitikinęs, kad tavo programą būtų galima dar žymiai paspartinti pasisėmus idėjų pvz iš čia: http://web.vu.lt/mif/v.stakenas/a+o/199 ... -19-46.pdf .
buntu1117 2016-01-11 22:27
Jeigu užtektu tikslumo, tai užtektu popieriaus ir pieštuko: https://en.wikipedia.org/wiki/Prime_num ... ime_number.
Artojas 2016-01-11 23:05
Padarysiu Code Review Vyčio kodui. 1. Ar būtinas toks komentaras? Nagi nagi, kam gi žmogui mesti tokį griozdą iškart? Suprantu, 28 puslapiai nedaug, bet keli žodžiai, galintys nukreipti link neblogo sprendimo, yra dar trumpiau.
buntu1117 2016-01-12 05:43
Artojui Darosi įdomu, prisijungia vis daugiau žmonių. Soriukas gal tikrai nereikėjo 28 puslapių, bet ten gražus straipsnis, maniau, kad nepakenks. Be to galima pasidomėti, kokį algoritmą tie "interneto resursai" naudoja https://primes.utm.edu/nthprime/algorithm.php .
Vytis M. 2016-01-12 10:43
Aha... kokios aistros verda. Žinot, aš kodo nerašiau, kad pasigirti jo gražumu, nors taip, reikėtų gerinti praktiką. Aš greitai pasirašiau juodraštį, patikrinau, rezultatas yra, kaip ir sprendimas automatiškai
Balltas 2016-01-12 12:33
Paprasciausias budas ir yra naudotis resursais kurie tau prieinami. Gali mastyti apie uzduoti kaip apie egzamina ir nesinaudot niekuo, bet egzaminas yra tavo ziniu patikrinimas, o realiuose uzdaviniuose, kuriuos meginama isspresti galima naudotis visa prieinama informacija ir metodais. Tiesa, kartais info, kuria pasiimame is kitu saltiniu, nebutinai yra teisinga ar tiksli, tai ta taip pat reik ivertinti. buntu1117: Interneto resursai naudoja greiciausiai jau suskaiciuotus duomenis, kuriuos saugo duomenu bazese, todel jiems kiekviena kart skaiciuot nereik. Ne visi moka programuot, del to be isoriniu resursu uzdavinys butu tokiems zmonems neissprendziamas. As pats ta uzdavini issprendziau su PHP kodo versija: ---------------------------------------------------- function is_prime($number) { $last = ceil(sqrt($number)); for ($i = 2; $i <= $last; $i++) if ($number%$i == 0) return false; return true; } $prime = 0; $currentNumber = 0; while ($prime <= 1000000) if (is_prime(++$currentNumber)) $prime += 1; $answer = $prime * 100 / $currentNumber; print round($answer, 2); ----------------------------------------------------
Vytis M. 2016-01-12 13:57
Mes kiekvienas naudojamės "interneto resursais" kuris jums matau labai užstrigo, bet pasiskaitykite konkurso sąlygas - neužtenka vien atsakymo, ištraukiamo iš oro, reikia ir sprendimo. Kaip jį gaust - jūsų reikalas, jums nenurodinėja. "Interneto resursų" svetainėje naują skaičių apskaičiuoja (apie 2 sekundes ir pan), o seną, jau naudotą, traukia iš duomenų bazės akimirksniu. @Baltas, perdėm trumpas ir sumakliavotas kodelis, išknistas ko gero iš interneto ir nepatikrintas. Aš pabandžiau išgauti laiką per kiek laiko jį įvykdys.. ir ką manai? Aš tavo kodo gabaliuką įsirašiau į failą
Balltas 2016-01-13 10:56
@Vytis M. aisku galima optimalesniu algoritmu rasti. Galima tiesiog tiktinti ar skaicius nesidalina is nei vieno pirminio skaiciaus pries tai kitus praleidziant, tai gali praleisti ne tik kas antra bet ir kas trecia, kas penkta, kas septinta, kas 11 ir t.t.
buntu1117 2016-01-13 16:19
O kaip jums šitas algoritmas? http://www.paul-scott.com/nth-prime.php
buntu1117 2016-01-13 17:13
Jau rašiau, kad "jeigu užtektu tikslumo, tai užtektu popieriaus ir pieštuko: https://en.wikipedia.org/wiki/Prime_num ... ime_number ". Tai dabar nepatingėjau, ir įstačiau n=1000001 į [27] formulę kuri yra skyriuje "Approximations for the nth prime number" . Gavosi P(1000001)/1000001=15.4838. Tada 1000001/P(1000001)*100=6.458 arba 6.46% (čia P(1000001) yra 1000001 -as pirminis skaičius. Tai užteko kalkuliatoriaus su natūriniu logaritmu. Štai jums ir šiuolaikiniai kompiliatoriai