Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
zdravim
zadání: Podle tzv. Goldbachovy hypotézy lze každé celé číslo větší než 5 vyjádřit jako součet tří prvočísel. Vstupní číslo nebude větší než 10000.Každý nalezený rozklad zapište na zvláštní řádek na standardní výstup, sčítance oddělte mezerami. Pokud rozklad zadaného čísla na součet tří prvočísel neexistuje, zapište na výstup slovo "neexistuje".Rozklady, které se liší pouze pořadím sčítanců, nepovažujeme za různé.
Nápověda: Nejprve si vygenerujte všechna potenciálně využitelná prvočísla pomocí metody Eratosthenovo síto.
už mám síto, ale nevím co dál jestli ty čísla ze síta ukládat do pole (nebo do tří) a pak nejak zkoumat kdy se soucet tri cisel z polí rovná vstupnímu číslu.
zde nabizim ke konrole kod sita, melo by to jet korektne.
program prvocisla_sito;
const n=MAXINT;
var a,i,m:integer;pole:array[1..n]of boolean;
begin
readln(m);
for i:=2 to m do
begin
pole[i]:=true;
end;
i:=1;
repeat
inc(i);
a:=i;
while (a*i)<=m do
begin
pole[a*i]:=false;
a:=a+1;
end;
until i>=m;
for i:=2 to m do
begin
if pole[i]=true then
write(i,' ');
end;
end.dekuji vsem za napady a ochotu
Offline
Ahoj, nezkoumal jsem ten kód na Eratosthenovo síto, ale doufám že funguje.
Pokud jsem to dobře pochopil, tak v poli "pole" s indexy od 1 do M je hodnota true, pokud dané číslo je prvnočíslo, v opačném případě false.
Nyní stačí toto pole projít pomocí dvou cyklů: Nejprve 1. cyklus určí první prvočíslo A, číli v rozsahu od 2 do M-2, pokud je dané číslo prvočíslo, pak ve 2. cyklu určí druhé prvočíslo B z rozsahu A+1 až M-1, pokud je druhé číslo prvočíslo, pak pokud je číslo M-A-B také prvočíslo, pak byla nalezena jedna z hledaných možností.
for i:=2 to M-2 do
if pole[i] = true then
for j:=i+1 to M-1 do
if pole[j] = true then
if pole[M-i-j] = true then
writeln(i,' ',j,' ',M-i-j);Offline
↑ vojta01:
tak tohle nejede uplne podle zadani ale uz vim jak na to
je to pro me vyresene dekuju
jeste bych potreboval poradit s jednou http://forum.matweb.cz/viewtopic.php?pid=148527#p148527
Offline
Stránky: 1