• 11-12-2014, 22:58:11
    #1
    Arkadaşlar, klavyeden girilen bir sayını yarı asal sayı olup olmadığını bulan programı nasıl yapabilirim?

    *Yarı asal sayılar iki asal sayının çarpımıylaortaya çıkan sayılarmış.

    İç içe for döngüsü ile yapabileceğimi düşünüyorum, destek olabilecek var mı?
  • 12-12-2014, 12:38:07
    #2
    burdan yazıyorum deneme yapmadım: sadece nested loop ile yaptım fonksyion kullanmaya izin varsa çok daha kolay olur asal sayıları bulmak:
    girilen sayi a olsun:

    int a = 121;
    
    int asal = 1;
    int yAsal = 0;
    int d;
    int i;
    for(i = 2; i<(a+1)/2;i++){//sayının yarısına kadar olan tam bölenlere bakıyoruz, en küçük asal: 2
     if(a%i == 0){ // eğer tam bölüyorsa
      for(d=2; d<i;d++){ //bölenin asal olup olmadığına bakıyoruz
         if(i%d == 0){
          asal = 0;//eğer kendisine kadar olan sayılardan herhangi birine tam bölülünüyorsa asal değil
          break;
         }
      }
      if(asal == 1){ // eğer bölen asalsa:
        asal = 1;
        int bolum= a/i;
        for(d=2; d<bolum;d++){ // bölüm ün asal olup olmadığını kontrol ediyoruz
         if(bolum%d == 0){
          asal = 0; // asal değil
          break;
         }
        }
         
        if(asal == 1){ // bölümde asalsa sayı yarı asal
         yAsal = 1;
      }
      }
    
    }
    }
    
    if(yAsal == 1){
    //sayı yarı asal)
    }
  • 17-12-2014, 20:07:51
    #3
    Üyeliği durduruldu
    Test ettim hocam bu kod işine yarar umarım.

    int asalmi(int sayi)
    {
    int i=2,sq;
    if(sayi == 2)
    return 0;
    sq=(int)sqrt(sayi);
    if(sayi % 2 == 0)
    return 2;
    for(i = 3; i <= sq; i+=2)
    if((sayi % i) == 0)
    return i;
    return 0;
    }
    //-----------------------------------------------------------
    int bolen,bolunen,sayi = 231;
    bolen = asalmi(sayi);
    if(bolen != 0)
    {
    bolunen = sayi / bolen;
    if(asalmi(bolen) == 0 && asalmi(bolunen) == 0)
    printf("yari asal");
    else
    printf("yari asal degil");
    }
    else
    printf("asal");