Asal Sayı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Asal Sayı
Herkese hayırlı günler,
arkadaşlar, elimizde bir A sayı var.
bu sayıya en yakın olan asal sayıyı bulaçagız;
Şartımız ise bu A sayısından küçük ve bu A sayısına en yakın
asal sayı olaçak.
Hadi kolay gelsin.
ben yapmaya çalıştım, mantıken çalışıyor ama yazılım malesef çalışmıyor.
arkadaşlar, elimizde bir A sayı var.
bu sayıya en yakın olan asal sayıyı bulaçagız;
Şartımız ise bu A sayısından küçük ve bu A sayısına en yakın
asal sayı olaçak.
Hadi kolay gelsin.
ben yapmaya çalıştım, mantıken çalışıyor ama yazılım malesef çalışmıyor.
MAydinli
Mantığı nasıl kurdunuz bilmiyorum. Fakat ben kendi mantığımı söyleyeyim:
Teorem: Bir sayı kareköküne kadar hiçbir sayıya bölünmüyorsa o sayı asaldır.
Yukarıdaki teoremden aşağıdaki kod çıkar. Kod c#.
Teorem: Bir sayı kareköküne kadar hiçbir sayıya bölünmüyorsa o sayı asaldır.
Yukarıdaki teoremden aşağıdaki kod çıkar. Kod c#.
Kod: Tümünü seç
static int GetClosestPrime(int num)
{
int closest;
for (closest = num-1; !IsPrime(closest); closest--);
return closest;
}
static bool IsPrime(int num)
{
for (int i = 2; i < Math.Sqrt(num); i++)
if (num%i == 0) return false;
return true;
}
MAydinli yazdı:C# kod bilgim yok ama yinede tşkkür ederim.
delphi karşılıkları da şöyle olması lazım(kodlara bakarak çevirdim denemedim yanlışlık olabilir)
Kod: Tümünü seç
function GetClosestPrime(num:integer):integer;
var
closest:integer;
begin
closest:=num-1;
while not IsPrime(closest) do
closest:=closest-1;
result:=closest;
end;
function Isprime(num:integer):boolean;
var i:integer;
begin
result:=true;
i:=2;
while (i<Sqrt(num)) do
begin
if ((num mod i)=0) then
result:=false;
i:=i+1;
end;
end;
Kod: Tümünü seç
function IsPrime( x: integer ) : Boolean;
var
factor : integer;
begin
if x < 2 then { No numbers < 2 are prime }
IsPrime := False
else if (x = 2) or (x = 3) then { 2 and 3 are prime }
IsPrime := True
else if not odd(x) then { other than 2, no even number is prime }
IsPrime := False
else begin { case: odd numbers > 3 }
{ look for an odd factor of x: if x has a factor, it must
be less than sqrt(x)
}
factor := 3;
while (sqr(factor) <= x) and ( x mod factor <> 0 ) do
factor := factor + 2; { try next odd number }
{ loop will stop whether x is prime or not (THIS is GOOD!)
afterward, must determine if it found a factor of x
}
IsPrime := x mod factor <> 0;
end
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sayi,i:integer;
begin
sayi:=46;
for i:=sayi-1 downto 2 do
begin
if IsPrime(i)=True then
break;
end;
form1.Caption:=IntToStr(i);
end;
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Bazı sistem prosedürleri ve fonksiyonlarının kodlarına ezelden beridir erişilmez
Bunlara odd, sqr haricinde bir yığın daha ek yapılabilir (copy, length, sqrt, move v.s.). İşlevleri açısından benzerlerini yazmak gerekirsekodları da aynı işlevleri görürler. Konu basit göründüğünden detaya girmedim ama yukarıda belirttiğim gibi bir çok fonksiyonun kodlarını System ünitesinde görürsünüz ve erişemezsiniz. İyi çalışmalar.

Kod: Tümünü seç
function myOdd(const Sayi:Integer):Boolean;
begin
Result:=(Sayi mod 2)=1;
end;
function mySqr(const Sayi:Extended):Extended;
begin
Result:=Sayi*Sayi;
end;
En son sabanakman tarafından 13 Kas 2007 03:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .