Üdv, hogy tudnám megoldani ezt pascalban?
Azt a feladatot kaptuk a suliban hogy egy számot bontsunk fel prímtényezőkre. Na most egy pici help kéne, mert nem sok kell ahhoz hogy kész legyen. Idáig így fest:
Program primszamok;
Uses Crt;
Var i: Byte;
szam,muvelet: Longint;
prim: Boolean;
Procedure beker;
Begin
Writeln('Kerek egy szamot!');
Readln(szam);
End;
Procedure eldont;
Begin
i:=1; muvelet:=0; prim:=true;
Repeat
i:=i+1;
muvelet:=muvelet+1;
Until (i=Round(sqrt(szam))) or (szam mod i=0);
If szam mod i=0 Then
Begin
Writeln('Nem primszam');
prim:=false;
End
Else Writeln('Primszam');
Writeln('Muveletek szama: ',muvelet);
End;
Procedure felbont;
Begin
If prim=true Then Writeln(szam,'=1*',szam);
If prim=false Then
Begin
End;
End;
Begin
Clrscr;
beker;
eldont;
felbont;
Readkey;
End.
Ha sikerült megtalálni a hibát, hatékonyságot javítani pl szitával tudsz.
Vagy ha mégjobbat akarsz, akkor simán beleírod a prímeket egy tömbbe és azokkal vizsgálódsz...
Igen igen, csak tegnap este már nem írtam ide :)
Na tehát hatékonyságon hogyan javítsak? Tömbös megoldást hogyan kéne kivitelezni?
function prim_e(n : int64) : boolean;
var v, j: int64;
prime: boolean;
begin
v := Trunc(Sqrt(n)) + 1;
prime := (n mod 2) <> 0;
j := 3;
while(prime) and (j <= v) do
begin
prime := (n mod j) <> 0;
Inc(j, 2);
end;
prim_e := prime;
end;
Talán ez gyorsabb. 3-tól vizsgálja kettesével így a fele szám kiesik ha végig kell menni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!