Giriş Yap Kayıt ol Online Üyeler Aktif Konular Arama Üyeler Forum Kuralları
Tahribat.Com | Asal Sayı Algoritması
Tahribat.Com Forumları
Java
      Asal Sayı Algoritması
Bu Bölümde yeni konu açmak için tıklayın Konuyu cevaplamak için tık...
Konu 19 Kasim 2011 (Cumartesi) 23:11 tarihinde açıldı. Kısayol | Alıntı yap | Özel Mesaj
RDxMaster


Kayıt : 15 Eylül 2007
Erkek Üye
 

Dostlar Kod Bu :

 

          System.out.println("Bir Sayı Giriniz");
         
           Scanner girdi = new Scanner(System.in);// Bu mühim değil girdi almak için

           int sayi = girdi.nextInt(); // Bu mühim değil girdi almak için sayi degiskenine klavyeden giriş
           int sayac = 2;

           if (sayi>=2)
           {
               while(sayi/2 >= sayac)
               {
                    if(sayi%sayac==0)
                    {
                        System.out.println("Sayimiz "+ sayac + " ile tam bölünmektedir.");
                        break;
                    }
                    else if(sayi%sayac!=0 && sayi>sayac*2)
                    {
                        sayac++;
                    }
                    if(sayi/2 == sayac)
                    {
                        System.out.println("sayimiz Asaldır");
                    }
               }
           }
           else
           {
               System.out.println("Sayınız >= 2 olmalıdır");
           }

Daha Kısa bi formülü varmıdır . Zorla bunu çıkarabildim.


 
19 Kasim 2011 (Cumartesi) 23:24 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
Sscheme


Kayıt : 4 Mart 2007
NULL
Erkek Üye
 

Bütün mesajlarım ve konularım BSD Lisansı"yla lisanslanmıştır. 
19 Kasim 2011 (Cumartesi) 23:55 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
wasd


Kayıt : 14 Haziran 2006
Ace of Spades
Erkek Üye
 
int i=2,bolen=0,sayi;
System.out.println("Bir Sayı Giriniz"); Scanner girdi = new Scanner(System.in); int sayi = girdi.nextInt(); if(sayi>=2) { while(i==n/2) { if(sayi%i==0) { bolen++; } i++; } if(bolen==0) { System.out.println("sayı asal"); } else { System.out.println("sayı asal değil"); } } else { System.out.println("Sayınız >= 2 olmalıdır"); }
şu hale getirdim ama kısa oldumu olmadımı anlamadım :D bi dene istersen

bide şu şekildede yapabilirsin. ***Kodlarda hata yaptım sanırım ama anlarsın demek istediğimi :)

int i=2,bolen=0,sayi;
System.out.println("Bir Sayı Giriniz");
Scanner girdi = new Scanner(System.in);
int sayi = girdi.nextInt();
if(sayi>=2)
{
while(i==n/2)
{
if(sayi%i==0)
{
bolen++;
if(bolen!=0)
{
System.out.println("sayı asal değil");
break;
}
}
i++;
}
System.out.println("sayı asal");
}
else
{
System.out.println("Sayınız >= 2 olmalıdır");
}
if bloklarını && ile birleştirmeye çalış şu an kafam çok fena karıştı düzenleyemiyorum

Banned from heaven... 
20 Kasim 2011 (Pazar) 00:37 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
RDxMaster


Kayıt : 15 Eylül 2007
Erkek Üye
 

valla ustam 1 saat yapmak için uğraştım 1 saatte düzeltmek için mal gibi hissettim kendimi :D

senin söylediğini anladım şöyle birşey var . kitapta buldum :D

---------------------------------------

           int sayi , sayac = 2 ;
           boolean test = true;
           
           System.out.println("Bir Sayı Gir:");
           Scanner girdi = new Scanner(System.in);
           sayi = girdi.nextInt();
          
           while (test && sayac<= (int)Math.sqrt(sayi))
           {
               if(sayi%sayac==0)
               {
                   test = 1 == 3; // Burada 1 == 3 yi boolean olan test değişkenine atıyor .yani test = false ;
               }
               else
               {
               sayac++;   
               }
                    if(test)                   
                        System.out.println(sayi +" Asaldır");                
                    else 
                        System.out.println(sayi + " Asal Değildir");
                    }

-----------------------------------------

Sanırım Burada daha az kod var. :) Yardımın için çok teşekkür ederim. Değişken isimlerini farklı tanımlayıp farklı kullanmışsın sorun orda .


 
20 Kasim 2011 (Pazar) 00:54 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
ontedi


Kayıt : 4 Eylül 2005
www.ontedi.com
Erkek Üye
 

Asal sayı için şuan en iyi yöntem sayıyı kareköke kadar bölmektir.

 

Mesela 100 sayısı asal olduğunu varsayalım. 100'ü tek tek 2, 3, 5, 7, 11... sayılarına bölmektense 100'ün karekökü = 10'a kadar bölmek daha kısa ve kolaydır. Kareköküne kadar bir sayı bölmüşse kendisini hayli hayli böler. 


http://www.ontedi.com Siteme beklerim herkesi. 
20 Kasim 2011 (Pazar) 01:22 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
wasd


Kayıt : 14 Haziran 2006
Ace of Spades
Erkek Üye
 

ontedi bunu yazdı:
-----------------------------

Asal sayı için şuan en iyi yöntem sayıyı kareköke kadar bölmektir.

 

Mesela 100 sayısı asal olduğunu varsayalım. 100'ü tek tek 2, 3, 5, 7, 11... sayılarına bölmektense 100'ün karekökü = 10'a kadar bölmek daha kısa ve kolaydır. Kareköküne kadar bir sayı bölmüşse kendisini hayli hayli böler. 


-----------------------------

hayır asal sayı tespiti için asal sayılara bölünebilmeyi değil sayının 1den büyük tamsayılardan hiçbirine bölünüp bölünmediği kontrol edilir(kendisi hariç) onun içinde sayının yarısına kadar olanları kontrol etmek yeter :)

 

EDİT:

int i=2,bolen=0,sayi;
System.out.println("Bir Sayı Giriniz");
Scanner girdi = new Scanner(System.in);
int sayi = girdi.nextInt();
if(sayi>=2)
{
if(sayi%2==0 || sayi%3==0 || sayi%5==0 || sayi%7==0 || sayi%11==0 || sayi%13==0 || sayi%17==0 || sayi%19==0)
{
System.out.println("sayı asal değil");
}
else
{
System.out.println("sayı asal");
}
}
else
{
System.out.println("sayı 2den büyük olmalı");
}

 

 edit :D bu kod olmadı,bölünebilme kurallarına bak vikipediden bu şekilde yap. olmamasının sebebi şu; mesela girilen sayı 7,7 asal sayı ama 7ye bölünebildiği için asal sayı değil diyecek program,ama en kısa yolu bu şekilde,bunu hatırladım,derste yapmıştık.


Banned from heaven... 
20 Kasim 2011 (Pazar) 01:37 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
JPriest


Kayıt : 9 Mart 2007
İstanbul--Çanakkale
Erkek Üye
 
       boolean asalMi(int sayi) {
		for (int i = 2; i <= Math.sqrt(sayi); i++) {
			if (sayi % i == 0) return false;
		}
		return true;
	}

Sen hiç kaval çaldın mı? 
20 Kasim 2011 (Pazar) 02:02 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
ontedi


Kayıt : 4 Eylül 2005
www.ontedi.com
Erkek Üye
 

@wasd

Dostum sayının kareköküne kadar olan sayılara bölmek daha hızlıdır. Ayrıca artırım miktarı 2 olmalıdır

Mesela

for i = 3 to sqr(sayi)

bolum = sayi / i

response.write bolum 

i = i + 2 

next


http://www.ontedi.com Siteme beklerim herkesi. 
20 Kasim 2011 (Pazar) 02:13 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
wasd


Kayıt : 14 Haziran 2006
Ace of Spades
Erkek Üye
 

ontedi bunu yazdı:
-----------------------------

@wasd

Dostum sayının kareköküne kadar olan sayılara bölmek daha hızlıdır. Ayrıca artırım miktarı 2 olmalıdır

Mesela

for i = 3 to sqr(sayi)

bolum = sayi / i

response.write bolum 

i = i + 2 

next


-----------------------------

tamam ufak sayılar için dediğin mantık doğru :) ama 1000001 asalmı değilmi denildiğinde sayı çiftlik kontrolünden geçer,karekökü 1000 olur ve 500civarı bölme yaparsın 2şer arttırarak,benim dediğimde 5-10 bölme işlemiyle biter. kod çok fazla kısaltılırsa performansta satır sayısıyla birlikte azalır.


Banned from heaven... 
20 Kasim 2011 (Pazar) 02:35 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
Serdarr


Kayıt : 28 Subat 2009
İzmir
Erkek Üye
 

edit : saçmaladım :D ...


say hello to my little friend ... 
20 Kasim 2011 (Pazar) 03:58 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
RDxMaster


Kayıt : 15 Eylül 2007
Erkek Üye
 

Birde olaya şöyle yaklaşalım. Şimdi int ve longun (tamsayılar long uzun int kısa) belli bir tanım aralığı var değilmi.? int için int değerinin maximumunu alıp onun karekökünü buldursak ve bu karekökten önceki bütün asal sayıları tarayıp bir diziye atayıp o diziyle girilen sayının kontrolünü yapsak .? Bu dediğim çok uzun bir işlem ama bence performans açısından en optimize yol bu olur. Mesela bir class tanımlarsın bu yöntemlerle elde ettiğin diziyi yani bir kütüphane gibi. daha sonra bir sayının asal olup olmadığını class a denetletirsin olay biter.ha bir classın çağrılması bir döngüyü döndermekten daha hızlı işleyen bir olaymıdır onuda bu konuda daha bilgili olanlar söylesin.(class ı dizilerle oluşturmamıza falan gerek yok o sayıları japonlar bulmuştur zaten  :D maksat herşeyi bi programlamayla yapmak için)


 

[1] [2]   [»] [»»]


Bu Bölümde yeni konu açmak için dıklayın Konuyu cevaplamak için tık...
Allah'a Havale Et Google Bookmark'a Ekle Yahoo'ya Ekle Stumbleupon'a Ekle Facebook'a Ekle Twitter'a Ekle   Google'da Ara : Asal sayı algoritması Favorilerime Ekle Yukarı Çık
Konuda 14 Mesaj Var.
Konu 841 Sefer Gösterilmiş.
2001-2012 © Tahribat Group - Her Hakkı Saklıdır. - ● Gizlilik İlkeleri ● Kullanım Koşulları ● İletişim