Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Asal sayı algoritması

Konu, 'Yazılım Geliştirme' kısmında ayhan tarafından paylaşıldı.

  1. ayhan

    ayhan Üye

    Kayıt:
    2 Mayıs 2003
    Mesajlar:
    125
    Beğenilen Mesajlar:
    0
    Şehir:
    İzmir
    Bir pozitif tamsayının asallığını yazdıran algoritma:

    L<0
    Print 'bir sayı gir'
    Read S
    I<1
    5:I<I+1
    K<S
    K<K-I
    If K>I then goto 10 endif
    If K^=0 then L<L+1 endif
    If I<S-1 then goto 5 endif
    If L=S-2 then print S,'sayısı asaldır'
    end.



    Bunun mantığını bir türlü çözemedim. Deneme olarak asal sayı yerleştirip çalıştırmaya çalışıyorum fakat anlayamadım. Kabaca yardımcı olursanız sevinirim...
     
  2. Myxomatose

    Myxomatose Aktif Üye

    Kayıt:
    3 Temmuz 2006
    Mesajlar:
    388
    Beğenilen Mesajlar:
    0
    Hangi dilde yazıldığı hakkında bir fikrim olmadığı için kod ile ilgili yorum yapamayacağım maalesef... Onun yerine kendi algoritmanızı da yazmaya çalışabilirsiniz. Meselâ, sayıyı ikiye bölüp, bölümden geriye doğru sayarak tüm olası çarpanları deneyebilirsiniz.
     
  3. ayhan

    ayhan Üye

    Kayıt:
    2 Mayıs 2003
    Mesajlar:
    125
    Beğenilen Mesajlar:
    0
    Şehir:
    İzmir
    Sparks dilinde... Teşekkür ederim artık anlamaya çalışacağım. Ezberlemek de istemiyorum.
     
  4. Fobus

    Fobus .

    Kayıt:
    7 Şubat 2003
    Mesajlar:
    1,094
    Beğenilen Mesajlar:
    0
    bende bi tane söyliyeyim yeri gelmişken...
    elimizde bir x sayısı olsun asal olup olmadigina bakalim

    x=5; (mesela 5 sayısına bakalım)
    2^x=32;
    32-2=30;
    30 mod x =0 ise Asal
    30 mod x= 0 Degil ise Asal degil...

    x=6; (mesela 6 sayısına bakalım)
    2^x=64;
    64-2=62;
    62 mod x =2 (sıfırdan farklı asal degil)
     
  5. DotNetKid

    DotNetKid Daimi Üye

    Kayıt:
    13 Mayıs 2003
    Mesajlar:
    1,625
    Beğenilen Mesajlar:
    0
    Şehir:
    TurKey
    @Fobus güzelmiş. bu kural nerde geçiyor acaba ?
     
  6. SrcnCkr

    SrcnCkr Daimi Üye

    Kayıt:
    27 Ekim 2006
    Mesajlar:
    525
    Beğenilen Mesajlar:
    0
    Meslek:
    Web Programlama
    Şehir:
    Bursa
    DotNetKid, dil olarak mı sordun bilmiyorum ama bunu her dile ayarlamak bence mümkün :) Çokta basit olmuş, akşama delphi sınavı vardı en çok korktuğum konu asal düzendi ve sayende anladım saolasın :)
     
  7. TRescon

    TRescon Yeni Üye

    Kayıt:
    26 Nisan 2005
    Mesajlar:
    2
    Beğenilen Mesajlar:
    0
    Meslek:
    Elektronik
    Şehir:
    İst
    Çok güzel bir program ama bu programın matematikte bir karşılığı varmı.
     
  8. kithnos

    kithnos Yeni Üye

    Kayıt:
    6 Ekim 2006
    Mesajlar:
    17
    Beğenilen Mesajlar:
    0
    import java.util.Scanner;
    public class asalsayi {

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input=new Scanner(System.in);
    int i=1;
    int sayi=input.nextInt();
    int sub=0;
    while(i<=sayi)
    {
    if(sayi%i==0)
    sub=sub+1;
    i++;
    }
    if(sub==2)
    System.out.println(sayi+" sayisi bir asal sayidir..");
    else
    System.out.println(sayi+" sayisi asal degildir..");
    }

    }


    Java da soyle birsey yazabiliriz,
    Burdaki mantik su: kullanici sayi giriyo,bilgisayar verdigimiz sayiyi 1 den basliyarak,o sayiya kadar butun sayilara boluyo.Eger sadece 1 ve kendisi bolunuyosa asal olduguna karar veriyo..
    Bu arada 2^x li ifade ilgincmis,matematiksel olarak ispati nasil acaba?bilen varmi?
     
  9. Mr_MOON

    Mr_MOON Aktif Üye

    Kayıt:
    19 Mayıs 2005
    Mesajlar:
    320
    Beğenilen Mesajlar:
    0
    Meslek:
    Lise kölesi
    Şehir:
    In cold light of the morning
    2^x pascal da üs almaydı yanlış hatırlamıyosam ama neden üs alındıktan sonra 2 çıkarılıyo onu çözemedim
     
  10. Fobus

    Fobus .

    Kayıt:
    7 Şubat 2003
    Mesajlar:
    1,094
    Beğenilen Mesajlar:
    0
    Bu algoritmayi Hindistanlı matematikciler bulmuş. Bu neden 2 çıkarılıyor dersen bi ispat yaparak açıklamak gerekir onu da ben yapamam. Doğru ve kabul edilmiş bir asal sayı bulma algoritması. İsteyen olursa çeşitli dillerde hazirlayabilirim. 1 saat = 30$ :D
     
  11. turker

    turker Agresif Üye

    Kayıt:
    19 Temmuz 2002
    Mesajlar:
    5,988
    Beğenilen Mesajlar:
    0
    o algoritma bir noktadan sonra doğru sonuç vermiyor muydu yoksa o başkası mıydı?
     
  12. Fobus

    Fobus .

    Kayıt:
    7 Şubat 2003
    Mesajlar:
    1,094
    Beğenilen Mesajlar:
    0
    yok doğrulugu kabul edilmis...
     
  13. Myxomatose

    Myxomatose Aktif Üye

    Kayıt:
    3 Temmuz 2006
    Mesajlar:
    388
    Beğenilen Mesajlar:
    0
    Valla tüm denemelerimde doğru sonuç verdi benim :garip:

    Bir de şunu keşfettim, ((2^x) - 2) % x şeklinde olan bu formüldeki 2'leri başka bir sayıyla değiştirirsek de hâlâ aynı sonucu veriyor sanırım - en azından tüm denemelerimde tuttu :) Örn. 3'ün x üssünü alıp 3 çıkartmak gibi...
     
  14. mcwalles

    mcwalles Üye

    Kayıt:
    25 Mayıs 2006
    Mesajlar:
    37
    Beğenilen Mesajlar:
    0
    aslında biraz kafanı yorsan kendi mantığını da cok kolay oluşturabilirdin. bir ipucu veriyim eğer anlamazsan vbasic,delphi,c++,c# herhangi birinde kod yazabilirim.

    bir kontrol değişkenin olucak bunu boolean yapabilirsin orneğin program başladığında bu değer true olucak sonra dışarıdan bir sayı isticeksin ve sayıyı 1 ve kendisi hariç bütün sayılara boluceksin bolumden kalanı mod la kontrol ediceksin eğer herhangi bi sayıya tam olarak bolunurse kontrol değişkenini false yapıcaksın ve donguden cıkıcaksın. sonrasını ifle yaparsın artık. knt true ise asal değilse normal sayı.
    kolay gelsin
     
  15. mcwalles

    mcwalles Üye

    Kayıt:
    25 Mayıs 2006
    Mesajlar:
    37
    Beğenilen Mesajlar:
    0
    he bu arada tabi 2 de asal sayı olduğu için onuda ayrı bir if le kontrol etmelisin
     
  16. kithnos

    kithnos Yeni Üye

    Kayıt:
    6 Ekim 2006
    Mesajlar:
    17
    Beğenilen Mesajlar:
    0
    mcwalles senin dedigin yol benim usttekı yazdıklarım...Java dilinde yazdım oraya,mantıgı senın dedıgınle aynı..2 ıcın ayrıca if e gerek yko ama aynı donguden 2 nın de asal oldugu cıkıyo
     
  17. oCRaCy

    oCRaCy Daimi Üye

    Kayıt:
    16 Nisan 2006
    Mesajlar:
    782
    Beğenilen Mesajlar:
    0
    Meslek:
    Öğrenci(ydi..)
    Şehir:
    İstanbul
    turkerin dediği gibi belli bi noktadan sonra doğru sonuç vermiyo galiba..

    PHP dilinde denedim..
    PHP:
    <?php
    function kontrol ($x
    {
      
    $ypow(2,$x);
      if( ((
    $y-2)%$x)!=) { return 'asal değil'; } else { return 'asal'; }
    }

    for (
    $i=2;$i<=100;$i++)
    {
     echo 
    $i.' => '.kontrol($i).'<br>';

    ?> 
    ÇIKTI
    Kod:
    2 => asal
    3 => asal
    4 => asal degil
    5 => asal
    6 => asal degil
    7 => asal
    8 => asal degil
    9 => asal degil
    10 => asal degil
    11 => asal
    12 => asal degil
    13 => asal
    14 => asal degil
    15 => asal degil
    16 => asal degil
    17 => asal
    18 => asal degil
    19 => asal
    20 => asal degil
    21 => asal degil
    22 => asal degil
    23 => asal
    24 => asal degil
    25 => asal degil
    26 => asal degil
    27 => asal degil
    28 => asal degil
    29 => asal
    30 => asal degil
    31 => asal
    32 => asal degil
    33 => asal degil
    34 => asal degil
    35 => asal degil
    36 => asal degil
    37 => asal degil
    38 => asal degil
    39 => asal degil
    40 => asal degil
    41 => asal degil
    42 => asal degil
    43 => asal degil
    44 => asal degil
    45 => asal degil
    46 => asal degil
    47 => asal degil
    48 => asal degil
    49 => asal degil
    50 => asal degil
    51 => asal degil
    52 => asal degil
    53 => asal degil
    54 => asal degil
    55 => asal
    56 => asal
    57 => asal
    58 => asal
    59 => asal
    60 => asal
    61 => asal
    62 => asal
    63 => asal
    64 => asal
    65 => asal
    66 => asal
    67 => asal
    68 => asal
    69 => asal
    70 => asal
    71 => asal
    72 => asal
    73 => asal
    74 => asal
    75 => asal
    76 => asal
    77 => asal
    78 => asal
    79 => asal
    80 => asal
    81 => asal
    82 => asal
    83 => asal
    84 => asal
    85 => asal
    86 => asal
    87 => asal
    88 => asal
    89 => asal
    90 => asal
    91 => asal
    92 => asal
    93 => asal
    94 => asal
    95 => asal
    96 => asal
    97 => asal
    98 => asal
    99 => asal
    100 => asal
    
    yani 3x lerden sonra doğru sonuç vermiyor galiba..:rolleyes:
     
  18. Kögüdey Meygen

    Kögüdey Meygen Aktif Üye

    Kayıt:
    28 Ekim 2002
    Mesajlar:
    327
    Beğenilen Mesajlar:
    0
    Meslek:
    Programcı,Felsefe Öğrencisi
    Şehir:
    Ankara
    tam olarak bunun bir cevabı olduğunu duymadım ama
    anahtar kelime: mersenne primes
     
  19. Fobus

    Fobus .

    Kayıt:
    7 Şubat 2003
    Mesajlar:
    1,094
    Beğenilen Mesajlar:
    0
    ya Win Calc da sorun var yada sizin kodunuzda yada php nin matemetik islemlerinde yeni bi bug buldunuz.

    2^41=2199023255552
    2199023255552-2=2199023255550
    2199023255550 mod 41= 0;

    ve hatta
    2199023255550 / 41 =53634713550 (Tamsayı)
    Benmi yanlis yaptim ?
     
  20. kithnos

    kithnos Yeni Üye

    Kayıt:
    6 Ekim 2006
    Mesajlar:
    17
    Beğenilen Mesajlar:
    0
    bu sorun acaba tanimlama turunden dolayi olabilir mi?Mesela java da degisken i int double float v.s gibi tanimlayabilirsin,buna gore de basamak sayisi alabilir max bi degisken..program o yuzden sasiriyo olabilir bi noktan sonra.Mesela 2^x liyi java da yazdim,ark in buraya yazdigindan farkli cikti daha,ilerde benimkide yanlis bulmaya basladi ama,php ile yanlis yazilanlarin bi kismini dogru buldu.Sanirim matematiksel formulden degil de degisken tipinden dolayi yanlis bi hesap oluyo olabilir.en kesin i elle carpimindan bulmak 2^x liyi buyuk sayilar icin deniyerek :)