Zdravim,
potrebuju udelat pole nebo proste neco kam budu moct ukladat informace o 1 000 000 polozkach...
vysvetleni... mam priklad: sestavit program ktery precte na vstupu cislo (ktere muze byt max. 1 000 000) a rozlozit ho na soucet prvocisel...neni problem, ale kde ulozit tech 200 000 prvocisel to fakt nevim...nekdo nakej napad?
(pokud se nemylim pascal ma longint neco okolo 65000 takze neni moc sance no)
Fórum › Pascal
Pole presahujici longint...
dik za opravu, ale stejne mi to nepomuze, potrebuju neco k tematu :-D...pascal asi nema rad velky pole protoze array[1..1000,1..1000] of longint nebere...chtel sem to udelat tak ze pro kazdy cislo ulozim hodnotu true nebo false podle toho jestli je prvocislo nebo ne...potom proste jen najdu vhodnou kombinaci ktera secte dve prvocisla a vyjde mi cislo ktery chci...jedinej zadrhel je na tom velkym poli, nema nekdo napad jak to vochcat? :-D
Zřejmě myslíš součin prvočísel, i když píšeš součet. V rozkladu na součet prvočísel nějak nevidím smysl.
Co třeba ty prvočísla uložit do textovýho souboru?
A jestli je za každou cenu potřebuješ mít v paměti, tak nějak přes pointry.
nebo to array[1..10^6] of boolean, jak jsi říkal
no ani v C se neda definovat staticky pole nejaky brutalni velikosti...
ale delal sem tam temer 1GB pole intu pomoci dynamicke alokace...
mimochodem na eratosthenovo sito ... tj taky na prvocisla :D
To KIIV : http://cs.wikipedia.org/wiki/Eratosthenovo_s%C3%ADto tady je to zapsané přímo i v Pascalu
nene normalne SOUCET prvocisel (Goldbachova veta - kazdy sudy cislo vetsi nez 2 se da napsat jako soucet dvou prvocisel - ne nutne ruznych)...
jinak vytvaret soubor to nemuzu...musi to byt v pameti...
a array[1..10^6] of boolean chodi chybu...odhadnul bych neco jako ordinal type expected
...nenepada me jiny reseni jak to udelat...pro cisla do 10000 bez problemu, pro tydle velky nevim jak to obejit...
KIIV...eratosthena znam...ale tam asi bude potreba taky trochu zvetsit pamet jak si psal...ale neslo by to i jinak, de mi o to ze to je uloha na cviceni a dostanu splneno jen pokud ji projedu pres kompilator podobny BP (dulezite je to podobny -- tzn. alokaci pameti mi to treba neveme)...takze pokud by bylo jiny reseni tak bych se tomuto rad vyhnul...
To drobas : BP umi alokaci pameti.. ale predne to chce vedet jakej je to kompilator aby se dalo resit co tam muze jit a co nemuze...
jestli je to treba free pascal tak sou tam drobne rozdily pokud vim
muzu to odevzdat ve 3 priponach (.pas, .pp, .fp)...tzn. Pascal prekladany GPC v rezimu kompatibility s Borland Pascalem nebo Pascal prekladany GPC ve vychozim rezimu nebo Free Pascal prekladany FPC...kazdopadne freepascal je celkem rekl bych flexibilni, proste to by snad povolil, ale de mi o to, ze ten prekladac ma nejaky svy meze---tzn. urcite nekonecny smycky utne po urcity dobe atp...a ja prave nevim jestli alokace pameti by mu taky nevadila...prece jenom kdyby to delal kazdej tak nevim treba s tim muzou bejt problemy...
>drobas:
Jestli chceš dokázat, že každé sudé číslo >2 se dá rozložit na součet dvou prvočísel, tak potřebuješ následující:
1) Zjistit, jestli je dané číslo větší než 2.
2) Zjistit, jestli je sudé.
3) For-cyklem projet od 1 do poloviny toho čísla. V každé iteraci si číslo rozložit na součet řídící proměnné cyklu a zbytek (číslo mínus ta proměnná) a zjistit, jestli jsou to obě prvočísla. Pokud ano, bingo, věta platí a cyklus může skončit.
4) Zjišťování, jestli jde o prvočíslo, se dá udělat buď dalším for-cyklem (testuj dělitelnost od 2 do poloviny toho čísla; jestli není dělitelné ničím, je to prvočíslo) nebo na to možná existuje nějaký patentní vzoreček, který ale neznám :-).
Ať na to koukám jak chci, nevidím, kde by se v tom dalo využít nějaké pole...
Jinak v real módu (TP, BP) je velikost polí a proměnných obecně, jak statických, tak dynamických, omezena na 64 KB. Jeden longint nebo pointer má 4 B, boolean 1 B. 1 KB = 1024 B, vyděl si to sám, vyjde ti maximální délka. Delší struktury jdou teoreticky udělat pomocí spojového seznamu, ale ty zabírají dost paměti (z těch základních 640 KB), takže prakticky se moc nehodí.
64 KB limit se dá překročit v protected módu (FP, Delphi, BP tuším taky, ale alokaci musíš řešit vlastními prostředky).
Moje stránka.
Laaca napsal:
Pozor - není pravda, že každé číslo > 1 se dá rozložit na součin dvou prvočíslel (a v tomto případě počítáme mezi prvočísla i jedničku).
Platí, že každé číslo > 1 lze rozložit na součin alespoň dvou prvočísel: např. 3=3*1; 16 = 2*2*2*2*1 nebo 72=2*2*2*3*3*1 nebo 600=2*2*2*5*5*3*1
vyjádřeno jinak, 600=2^3*5^2*3^1
Prvočíselný rozklad by doopravdy šel řešit i poz použití jakéhokoliv pole, ale program by vypsal jenom "bezmocninový" tvar rozkladu. Jestliže chceš "mocninový" tvar, potřebuješ, podle mě, krátké pole, abys uchovával řád mocniny pro každé zúčastněné prvočíslo.
rikal, ze jde o soucet...
To Mircosoft : diky za postup, ale tento postup sem povazoval prave za to nehezke mrte for cyklu obsahujici reseni...ale asi to bude jedine reseni pokud nechci alokaci pameti...ono proste kdyz davas for cyklus pro pul milionu opakovani tak to jednak neni moc efektivni a jednak nehezky...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Razeni pole ktere v sobe ma dalsi pole podle hodnoty indexu — založil david
Zapsání generovaného čísla do pole a zapisování generovaných čísel d… — založil juraj111
Jak z "List<Integer> pole" uddelat normalni "int[] pole" — založil K4BlOs
Definice pole v C (jak použít pole uvnitř struct?) — založil oxidián
Odebrání prvku pole v C,problem s vypisem pole — založil Standa
Moderátoři diskuze