Gljuks Augusts 4, 2005 Share Augusts 4, 2005 2 Nexodus mozh string ca; vietā ieliec char ca[250]; vai, ko līdzīgu :roll: vispār tā tikai tāda doma... Link to comment Share on other sites More sharing options...
Guest Augusts 4, 2005 Share Augusts 4, 2005 Paldies, palīdzēja... tagad iebraucu kā šīs lietas darās iekš C++ Link to comment Share on other sites More sharing options...
Guest bljaaviens Augusts 4, 2005 Share Augusts 4, 2005 Gljuks, man galiigi nepatiik tas kvadratsakne tur... EDIT: tagad patiik. aizmirsu, ka ir taada lieta kaa lokaalie mainigie... Link to comment Share on other sites More sharing options...
Guest bubu Augusts 4, 2005 Share Augusts 4, 2005 Ja a^2 = b, tad (a+1)^2 = a^2+2a+1 = b+2a+1 Tātad, kad izrēķini kvadrātu, tad lai dabūtu nākamo ņem to kvadrātu pieskaiti divkāršotu pašu skaitli un vēl +1. Link to comment Share on other sites More sharing options...
AndzX8-842 Augusts 4, 2005 Share Augusts 4, 2005 Nu, pag! Debug modee vinjsh tiishaam sajaaj kodu, iekljaujot tajaa lielu cjupu ar Debug info utml. lietaam. Kods sanaak daudz leenaaks un lielaaks, bet ir debugojams. Release modee vinjsh to visu vaac sasodīts aaraa un taisa kodu daudz aatraaku, mazaaku un vispaar! Protams, optimaizoshanu var atsleegt saglabaajot paareejaas Release modes iipashiibas, bet vai tam jeega, ja 99% gadiijumu tas patiesi nostraadaa? Sho gadiijumu es arii kaut kaa paarraxtiiju biki savaadaak un viss aizgaaja!Ar katru kompilēšanas reizi, ja izmanto MS VC 2003 .NET kods palielinās apmēram 10x izmēros. Man 35MB kods izauga par 400MB . Un ar nākamo reizi vēl lielāks...un tas ir netikai ar debug. Link to comment Share on other sites More sharing options...
Gljuks Augusts 4, 2005 Share Augusts 4, 2005 Liels paldies , mēģināšu izburties cauri :wink: Edited: bubu, tas par to kvadrātu formulu man :?: Ja jā, kurā vietā tas būtu jāpielieto? Edited2:Apskatījos to "Vispārējo pirmskaitļu sietu", laikam es ar savām zināšanām (vismaz pagaidām) neuzrakstīšu īpaši efektīvāku algoritmu :cry: Nekas, buršos cauri tutoriāļiem, parēķināšu vieglākus uzdevumus, 4 gadus Datorzinātnes pamācīšos, tad, gan jau, ka pratīšu vairāk :twisted: :twisted: :twisted: Link to comment Share on other sites More sharing options...
Remus Augusts 4, 2005 Author Share Augusts 4, 2005 Turpinot par manu programmu. Vilx- rakstiitaa protams bija smukaaka un noteikti pareizaaka, bet taa neatrisinaaja vienu probleemu - a veertiiba otraa aplja saakumaa palika 256 Ls. Kaa lai to dabuu gatavu? Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Tfu! Patiesi - to nebiju pamaniijis! Nomaini rindinju: cout<<"Jusu konta paliek "<<a-i<<"Ls"<<endl; uz cout<<"Jusu konta paliek "<<a-=i<<"Ls"<<endl; Par tiem pirmskaitljiem - varbuut meegjini dariit taa - uztaisi papildmasiivu ar visiem liidz shim atrastajiem pirmskaitljiem. Katru naakamo skaitli paarbaudi tikai, vai vinjsh dalaas ar kaadu no liidz shim atrastajiem pirmskaitljiem (nevis visiem skaitljiem) liidz savai kvadraatsaknei. Ja nedalaas - taatad pats ir pirmskaitlis, pieliekam masiivam galaa. Beigaas apskatamies, cik pirmskaitlju esam atradushi, un paari palikushie skaitlji tad ir ne-pirmskaitlji. Vajadzeetu buut diezgan fixi. Jautaajums tikai - cik lielu masiivu njemt pirmskaitljiem? Bija kaukaada teoreema par to, bet to es nezinu. :oops: Cik lieli var buut ievaddati? Ja int robezjaas (4 miljardi), mosh uzliec uz nakti saskaitiities? Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Protams, bet ar O(n^2) tas tomer varetu panemt kadu laicinju. Link to comment Share on other sites More sharing options...
Gljuks Augusts 4, 2005 Share Augusts 4, 2005 Maksimālais pirmskaitļu skaits dotā intervāla robežās ir 78498, masīvs sanāk tā neko... Ja nekļūdos, kaut kur tiku lasījis, ka ir kaut kāds ierobežojums masīva lielumiem, bet nu mēģināšu :wink: , galu galā man tikai 2 testi laika dēļ izgāzās... Edited:Gribēju ķerties klāt, aplauzos, ja man iedod intervālu no 900 000-1 000 000, man jebkurā gadījumā ir jāaprēķina visi pirmskaitļi līdz tam, laikam jāatmet ar roku, apnika man tas uzdevums, turklāt algoritmu pareizu izdomāju un 8 punktus ar savācu Paldies visiem par palīdzību :wink: Link to comment Share on other sites More sharing options...
Guest bubu Augusts 4, 2005 Share Augusts 4, 2005 Ierobežojums ir tikai no vides kur tā izpildās. DOS=64kb, Win/Linux=2gb Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Nu, kas par vainu masiiva lielumam? :? int tipa masiivs ar 80'000 elementiem aiznjemtu ~320KB RAM. Pupu mizas! Ja vien netaisi DOS. Aatrdarbiiba - nu, domaaju, ka butu pienjemama. Viss, ko atliek dariit ir skaitiit pirmskaitljus liidz lielaakajam skaitlim (intervaala augsheejai robezjai) un pa celjam atcereeties, kaads shis skaits bija pie mazaakaa skaitlja (intervaala apaksheejaas robezjas). Tad beigaas atnjem un voila! Link to comment Share on other sites More sharing options...
Remus Augusts 4, 2005 Author Share Augusts 4, 2005 cout<<"Jusu konta paliek "<<a-=i<<"Ls"<<endl; nestraada. shii rindinja izsauc erroru, ko pats nemaaku labot. (error C2297: '<<' : illegal, right operand has type 'char [3]') Labi kas tur biaj ar to debuggeri - kaa iisti ar vinju jaariikojas? Kad es uzspiezhu start debug vinsh izmet to pashu erroru ko kompileejot. Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Debugeris ir taada lieta, kas ljauj Tev izpildiit programmu rindinju pa rindinjai; apskatiities mainiigo saturus darbiibas laikaa; izpildiit programmu liidz kaadai konkreetai rindinjai vai staavoklim; utml. Tas ir nenoveerteejams riiks, kas aarkaartiigi paliidz kljuudu mekleeshanaa. Diemzjeel, ne visaas videes tas straadaa paaraak labi. Piemeeram, Dev-C++ ir pilniigs murgs ar to - reizeem iet, reizeem ne... Labi debugeri ir Borland un MS produktiem. Bet - debugeris attiecas uz straadaajoshu programmu, un, lai programma straadaatu, tai ir jaanokompileejas... Pameegjini to a-=i ielikt iekavaas. Link to comment Share on other sites More sharing options...
Remus Augusts 4, 2005 Author Share Augusts 4, 2005 Vilx- ko es bez tevis dariitu. Lielais paldies. pagaidaam Link to comment Share on other sites More sharing options...
Gljuks Augusts 4, 2005 Share Augusts 4, 2005 Klausot Vilx padomam uzcepu programmu, kas izmanto masīvu. Secinājumi: :arrow: Algoritmu esmu uzrakstījis pareizu, jo atbildes sakrīt ar pirmo variantu 8) :arrow: Programma mistiskā kārtā nav ātrāka, jo pie intervāla [2;200 000] darbojas 6 sekundes , kas ir nepiedodami liels laiks... :arrow: Man laikam ir maz pacietības, jo es nevarēju sagaidīt, kamēr programma apstrādās intervālu [2;1 000 000] un rupji pārtraucu programmas darbību :arrow: Tā, kā ir jāaprēķina arī visi pirmskaitļi līdz intervāla sākumam, tad es atkal rupji pārtraucu programmas darbību, kad tai bija jāpārbauda tikai 6 skaitļi intervālā [999 990;999 995] :arrow: Lieliski saprotot, ka algoritms nav efektīvs (ne 1., ne 2. variants) un milzīgā slinkuma/zināšanu trūkuma dēļ negribot pētīt efektīvākus algoritmus, secinu, ka šis uzdevums jāatliek maliņā, kamēr nebūšu augstskolā laiciņu pamācījies... :arrow: Pats svarīgākais secinājums (vismaz man), bez papīra un pildspalvas ir grūti kaut ko uzprogrammēt :wink: Ja kādu interesē, tad kods: #include <iostream.h> int main() { //define mainigos int sakuma_skaitlis,beigu_skaitlis,pskaitlis,pirmskaitli=0; int masivs[80000],skaits_lidz_sakumam; masivs[0]=2; //ielasa mainigos cin>>sakuma_skaitlis; cin>>beigu_skaitlis; //noskaidro pirmskaitlu skaitu lidz intervala sakumam for(int i=2;i<sakuma_skaitlis;i++) { pskaitlis=i; //skaitli salidzina ar visiem ieprieksejiem pirmskaitliem //atkarto, kamer masiva ir elementi for(int j=0;j<pirmskaitli;j++) { if(i%masivs[j]==0) { pskaitlis=0; break; } } //parbauda vai skaitlis ir pirmskaitlis... if(pskaitlis!=0) { //saglaba pirmskaitli masiva masivs[pirmskaitli]=pskaitlis; pirmskaitli++; } } //saglaba esoso pirmskaitlu skaitu skaits_lidz_sakumam=pirmskaitli; //turpina noskaidrot pirmskaitlu skaitu lidz intervala beigam for(int i=sakuma_skaitlis;i<=beigu_skaitlis;i++) { pskaitlis=i; //skaitli salidzina ar visiem ieprieksejiem pirmskaitliem //atkarto, kamer masiva ir elementi for(int j=0;j<pirmskaitli;j++) { if(i%masivs[j]==0) { pskaitlis=0; break; } } //parbauda vai skaitlis ir pirmskaitlis... if(pskaitlis!=0) { //saglaba pirmskaitli masiva masivs[pirmskaitli]=pskaitlis; pirmskaitli++; } } //izvada atbildi cout<<pirmskaitli-skaits_lidz_sakumam; return 0; } Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Vispaar, tur patiesi kaukas nav riktiigi, ja taa straadaa tik ilgi! :!: Pameegjinaashu pats nokompileet... Hmm... jaa, Tev taisniiba! OK, ieveerteeshu, kur tas joks ir! :? Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Heh, atklaaju! Tev jau vajag paarbaudiit nevis ar visiem pirmskaitljiem liidz dotajam skaitlim, bet gan ar visiem pirmskaitljiem liidz dotaa skaitlja kvadraatsaknei! Pieliec to, un tad gan lidos! Tikai pie 1020389 tas masiivs kljuust par mazu. Link to comment Share on other sites More sharing options...
Gljuks Augusts 4, 2005 Share Augusts 4, 2005 OK, tūlīt mēģināšu :wink: Starp citu uzdevumā ir intervāls [2;1 000 000], tāpēc, jau arī masivs[80000], nevis vairāk. Man tādas aizdomas, ka tu uzdevumu manā postā iepriekšējā lapā neesi izlasījis :idea: Link to comment Share on other sites More sharing options...
Vilx- Augusts 4, 2005 Share Augusts 4, 2005 Vareetu buut. :oops: Link to comment Share on other sites More sharing options...
Gljuks Augusts 4, 2005 Share Augusts 4, 2005 Murgs... Sākšu ar to, ka labu laiku padomāju, kā, lai dabū pirmskaitļus līdz dotajam skaitlim :oops: , kamēr atjēdzos, ka man vajag tikai vietu masīvā, līdz kurai ir pirmskaitļi... Labu laiku domāju, kā to dabūt gatavu, līdz, paralēli drukāšanai uz papīra un monitora, dzima teorēma, kuras rezultātā kodā uzradās mainīgais kvadratsakne un kods 2 vietās no for(int j=0;j<pirmskaitli;j++) pārtapa par kvadratsakne=(int)sqrt(pirmskaitli); for(int j=0;j<kvadratsakne;j++) Programma tagad neapšaubāmi izpildījās ātrāk Bet, ne tik ātri, kā 1. variants :!: Kapēc nezinu, gan jau, ka līko roku dēļ :oops: Štrunts par visu nolēmu programmu nosūtīt pārbaudei rezultāts: Tests/Rezultāts 1 Pareizs 2 Pareizs 3 Pareizs 4 Nepareizs 5 Pareizs 6 Pareizs 7 Pareizs 8 Laiks 9 Laiks 10 Laiks Labi, laiku es saprastu, bet kapēc 4. tests ir nepareizs? Nolēmu pārbaudīt pats, intervāls [2;10] atbilde 4, viss kārtībā, intervāls[2;50] un 15 vietā es dabūju 16, un arī pie [2;1 000 000] dabūju rezultātā par 1 vairāk. Viss skaidrs, nodomāju, teorēma līka, vajadzētu drošības pēc izdarīt kvadratsakne++; uzreiz pēc kvadrātsaknes izvilkšanas, tā teikt, lai pārbauda biku vairāk vērtības, nokompilējās normāli, palaižu - error da error, izbesīja... Nezinu tavu variantu, bet manējais viennozīmīgi ir līks :oops: Secinājums: Jāmēģina atrast zālītes slimībai CurveHands, jeb jāuzlabo blīve starp klaviatūru un krēslu, tāpēc labāk pārlasīšu iesācēju tutoriāļus, un mēģināšu kādu gudrāku grāmatu atrast... P.S. Nu i palagu sadrukāju P.P.S. Pareizi Aleksejs teica Gljuks ir aprakstījis Erastotena sietu - visvienkāršāko algoritmu pirmskaitlu meklēšanai dotajā intervālā - ipaši neiedziļinājos, taču cik atceros, tad tam bija sarežģītība o(n^2), tā ka nekādus ļoti spīdošos rezultātus ar to neiegūsi. Ja vajag efektīvāku tad izmanto "vispārējo pirmskaitļu sietu", kas ir ātrākais šobrīd publiski zināmais determinētais pirmskaitļu meklēšanas algoritms. Link to comment Share on other sites More sharing options...
japets Augusts 5, 2005 Share Augusts 5, 2005 ar 4. piegaajienu shoriit man izdevaas iekljauties laikaa: [links aizvaakts] izmantoju bubu ieteikto taktiku. Iespeejams, ka arii nav pats optimaalaakais, toties straadaa... EDIT: izdomaaju, ka pubilceejot kaadu no risinaajumiem zuud jeega no uzdevuma un Gjirtam rodas iemesls manis sishanai Link to comment Share on other sites More sharing options...
Guest bljaaviens Augusts 5, 2005 Share Augusts 5, 2005 cout<<"Jusu konta paliek "<<a-=i<<"Ls"<<endl; nestraada. shii rindinja izsauc erroru, ko pats nemaaku labot. (error C2297: '<<' : illegal, right operand has type 'char [3]') tas varbuut tapeeec, ka vienaa briidii tev int i paarveertaas par char i (tajaa mirklii tev arii uzradaas int b, kuru, iespejams, vajadzeeja defineet kaa char, nevis nabaga i aiztikt) Link to comment Share on other sites More sharing options...
Gljuks Augusts 5, 2005 Share Augusts 5, 2005 Šorīt saņēmu PM: nu ja tev ir veeleeshanaas es jau tev vareetu to kodu aizsuutiit kas iet. mani vienkaarshi forumaa nelaizh postet veel visur kur gribu. atbildot, ka man ir vēlēšanās saņēmu otru nu tad shiitaads bija mans variants: #include <fstream.h> #include <math.h> int main(int argc, char* argv[]) { //nodefineejam mmmmainiigos ifstream input("primes.in"); int s, b, g; int deriigie = 0; //iielasam intervaalu input >> s >> b; input.close(); //izsleedzam paara skaitlus no intervaala register char x; if (s == 2){ s = 3; deriigie++; } if (s%2 == 0){ s++; } for (int sk = s; sk <= b; sk = sk +2) //sk - visulaiku nepaara, jo paara nekad nav pirmsk (izn. 2) { x = 1; g = (int) sqrt(sk) + 1; for(int i = 3; i <= g; i = i +2) //paarbauda ar visiem nepaara sk jo ar paara sk nepaaris nedalaas { if (sk%i == 0) { x = 0; break; } } if (x) deriigie++; } ofstream output("primes.out"); output << deriigie; output.close(); return 0; } ceerams ka buus skaidrs kas kaa kaapeec :arrow: Ieteikums: Mozh Destructor piešķirt lietpratēja tiesības :roll: Link to comment Share on other sites More sharing options...
Vilx- Augusts 5, 2005 Share Augusts 5, 2005 Bet shitais jau ir tas pats Tavs pirmais variants, kas gaaja bezdieviigi leeni! OK, ja Tev neiet, pateikshu, kas konkreti jaaizdara! Par pamatu njemam to programmu, kuru Tu iepostoji Thu Aug 04, 2005 11:22 pm . 1. Saakumaa pieliec veel vienu mainiigo int k; 2. Tur, kur ir rakstiits (divaas vietaas) for(int j=0;j<pirmskaitli;j++) aizstaajam ar k=(int)sqrt(pskaitlis); for(int j=0;(j<pirmskaitli) && (masivs[j]<=k);j++) 3. Saakumaa pieliekam #include <math.h> Voila! Un VISS IET. Tava kljuuda bija, ka Tu saliidzinaaji j<kvadratsakne, nevis masivs[j]<kvadratsakne. Link to comment Share on other sites More sharing options...
Gljuks Augusts 5, 2005 Share Augusts 5, 2005 :oops: Paldies Teorēma radās, pateicoties Vilx un pētot pirmskaitļu rindu līdz 40... Ar to grāmatu, varbūt kaut kad vēlāk, jo a)Traucē dzīvesvieta b)Septembrī sāku mācīties LU, un b1)Gribēsies vispirms aprast ar apstākļiem b2)Jau 1.sem. B daļā ir "Ievads skaitļu teorijā" Apskatīju Destructor iesūtīto variantu, tas tiešām izpildījās laikā... Papētot tuvāk,šo variantu, konstatēju, ka varu ar salīdzinoši nelielām izmaiņām nokopēt algoritmu uz savu 1.variantu, (tagad nokaunos, ka bija slinkums liekās 10-20 min padomāt) :oops: :oops: :oops: Jebkurā gadījumā paldies visiem, kas palīdzēja :wink: Link to comment Share on other sites More sharing options...
Vilx- Augusts 5, 2005 Share Augusts 5, 2005 Whadda? :? Taa arii neiebraucu... Tava pilnaa paarlase beigaas straadaaja aatraak? Un kas taa par teoreemu? What is going on? :shock: Link to comment Share on other sites More sharing options...
Gljuks Augusts 5, 2005 Share Augusts 5, 2005 Whadda? :? Taa arii neiebraucu... Tava pilnaa paarlase beigaas straadaaja aatraak? Un kas taa par teoreemu? What is going on? :shock: Palaboju variantu ar masīviem un salīdzināju ar Destructor variantu, uz aci intervālā [2;1 000 000] strādāja aptuveni vienādi (ap sekundi) Teorēma: jebkura skaitļa lielākais dalītājs nepārsniedz šī skaitļa kvadrātsakni. Kvadrātsakne no 16=4 16 lielākais dalītājs 8 Es, protams, varu kļūdīties, bet man liekas, ka Teorēma: jebkura skaitļa mazākais dalītājs nepārsniedz šī skaitļa kvadrātsakni. skanētu pareizāk :roll: Link to comment Share on other sites More sharing options...
Guest bubu Augusts 5, 2005 Share Augusts 5, 2005 Teorēma: jebkura skaitļa mazākais dalītājs nepārsniedz šī skaitļa kvadrātsakni. Gljuks, tad jau vienmēr tas sanāk 1, jo ir gan mazākais, gan dalītājs. Aleksejs: to tavus nesaliktos netriviālos dalītājus sauc par pirmreizinātājiem. Link to comment Share on other sites More sharing options...
Gljuks Augusts 5, 2005 Share Augusts 5, 2005 Nu jā, tā jau skan labāk Pavisam aizmirsu par 1 :oops: Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!