Dobrý den.
Rád bych zde někoho poprosil, jestli by mi nemohl vyřešit tento příklad s následujícím zadáním:
{Zadani:
Generujte prvnich n prvociselnych dvojcat. Prvociselnym
dvojcetem rozumime dvojici prvocisel (p1,p2) takovou, ze p2=p1+2.
Priklad: (3,5),(5,7),(11,13),...
}
program prvociselna_dvojcata;
function je_prvocislo(cislo: integer): boolean;
begin
end;
var
kolik: integer;
begin
write('Kolik dvojcat hledat: ');
readln(kolik);
{doplnte cyklus pro nalezeni "kolik" dvojic tak, ze podminka dvojice
pro testovane cislo "n" je:
je_prvocislo(n) and je_prvocislo(n+2)
}
end.
je to to poslední, co potřebuji do zápočtu a nevím, co s tím...
Děkuji.
Fórum › Pascal
úkol
Predpokladám že tam nebude treba dbať na pamäťovú náročnosť tak si ti dovolím predostrieť takéto teoretické riešenie.
Najprv si budeš musieť doplniť funkciu je_prvočíslo ktorá bude veľmi užitočná. Takže poučka hovorí že prvočíslo je číslo ktoré je deliteľné iba sebou samým a jednotkou. Z toho vyplýva že na začiatku budeš predpokladať že je to prvočíslo. Potom tam vložíš cyklus ktorý pôjde od dvojky po zadané číslo mínus jedna. V cykle budeš testovať či je zadané číslo deliteľné niektorým týmto číslo v intervale <2 .. zadanécislo-1> a ak áno tak číslo nie je prvočíslo čiže vráti hodnotu FALSE.
No a teraz sa pustíme do hlavného programu. Načítanie požadovaného počtu prvočísených párov už máš. takže ti stačí iba doplniť cyklus v ktorom ich nájdeš. Takže kedže nevieš počet opakovaní tak si musíš vybrať medzi while alebo repeat to už nechám na teba. Dôležité je aby si však ešte pred samotným cyklom vytvoril premenné pocitadlo ktorá ti bude hovoriť koľko párov si našiel a premennú ktorá ti bude hovoriť ktoré číslo testuješ( nazvem si ju napr. "i"). Pocitadlu priradíš nulu keďže si ešte žiaden pár nenašiel a premennej i priradíš dvojku keďže jednotka nie je prvočíslo. Teraz sa môžeš pustiť do samotného cyklu kde budeš testovať či je i a i+2 prvočíslo(na to nám je dobrá tá funkcia), ak áno našiel si dvojicu a môžeš ju vypísať a zároveň nezabudni zvýšiť hodnotu premennej o jedna pretože si práve našiel jeden pár. Ku koncu cyklu samozrejme nezabudni zakaždým zvýšiť aj hodnotu premennej i (o koľko nechám na teba ... existuje viac možností ), aby si v kuse netestoval tie iste hodnoty. No a cyklus sa ti samozrejme musí skončiť keď nájdeš požadovaný počet párov, takže to tam pri písaní cyklu niekde daj:-).
Dúfam že som na nič nezabudol ale malo by to fungovať.
ja s tim nechci otravovat, ale uz mi de hlava kolem z uceni ke zkouskam a este mam programovat tohle... moc by mi pomohlo, kdybys mi spis ten programek napsal... :-/ mam to jako nepovinej predmet a uz se k nemu nikdy nevratim a funkce a tohle uz trosku nechapu... :( ale jak rikam no, nechci otravovat, ale moc by mi to pomohlo..
To Grungy :
Je zbytečné procházet čísla tak daleko, stačí do půlky. Těžko asi najdeš menšího dělitele než 2 (s výjimkou 1, ale ta dělí i prvočísla, takže ji neuvažuji) a pokud jím vydělíš zadané číslo, dostaneš právě tu půlku. Každé vyšší číslo už musí být pro dosažení zadaného vynásobeno (reálným) číslem menším než 2, tedy se nejedná o dělitele (kromě samotného čísla, které ale neuvažuji ze stejného důvodu jako číslo 1).
Možná se to lépe vysvětlí na příkladě - pokud mám zadané číslo 100, můžu dojít k rozkladům (1*100) 2*50, 4*25, 5*20, 10*10, od 51 do 99 tam není vůbec nic.
Možná někdo vymyslí i další vylepšení, ale myslím, že už by to potřebovalo složitější úvahy a nějaké podmínky, toto je celkem jednoduché a ušetří polovinu výpočtů.
Jinak při tomto zadání se mi matně vybaví pojem "Erastenovo síto", bohužel už vůbec netuším, oč jde a zdali se to týká tématu, ale pokud si chce někdo zagooglit, třeba to pomůže.
To Jan Koláčný : Jedna funkce testující prvočíselnost se válí tady, stačí kliknout: http://mircosoft.ic.cz/download/prvocisla.zip. Zbytek ti dost podrobně vysvětlil Grungy a jestli jsi během semestru dával alespoň trošku pozor, měl bys mít prográmek hotový za pět minut ;-).
Moje stránka.
To retriwr : No to som vedel ale nechcel som ho zbytočne zaťažovať niečím takým. Okrem toho myslím že tam stačí hladať delitele len do druhej odmocniny zadaného čísla, ale to by zas pre neho bolo zbytočné skomplikovanie.
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
Moderátoři diskuze