c de bir sayının asal olup olmadığını bulma

özcan bilim
02-10-2010, 23:20   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
19 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

c de bir sayının asal olup olmadığını bulmak istiyorum.
bana açıklamalı olarak kodlarını yazarsanız çok sevinirim.
cevaplar için şimdiden teşekkürler.

censez41
02-10-2010, 23:32   |  #2  
censez41 avatarı
Yıllanmış Üye
Teşekkür Sayısı: 3
1,705 mesaj
Kayıt Tarihi:Kayıt: Nis 2009

input "sayi gir";a
for i=2 to a-1
if int(a/i)*i=a then
print "sayı asal değil":end
endif
next i
print "sayı asal"

ben basic bildiğim için programı basic ile yazdım

Son Düzenleme: censez41 ~ 02 Ekim 2010 23:38
muh34
02-10-2010, 23:34   |  #3  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Bir sayının kendisi ve 1'den baska boleni yoksa o sayı asal sayıdır.Bu problem basit bir dongu kurularak cozulebilir.ornegin dongu sayacının 2'den basladıgı bir for dongusu ele alacak olursak,kontrol ettigimiz sayının yarısına kadar donguyu çalıştırmamız yeterlidir.Tabi bu çalışmada bir de bolunebilme kontrolu yaparak sorunun cozumune ulasmıs oluruz.Algoritmanın koda donusmus hali asagidaki gibidir.
 
#include <stdio.h>
main() {
      
       int sayi=5,flag=0;
       for(int i=2;i<=sayi/2;i++) {
       if(sayi%i==0) {
       flag=1;
       break;
       }}
       if(flag==0)
       printf("Sayi Asaldir\n");
       else
       printf("Sayi Asal Degildir\n");
       return 0;
       }
Bir sayının asal olup olmadıgına euclid algoritmasına dayanarakda karar verilebilir.Başarılar

Son Düzenleme: muh34 ~ 02 Ekim 2010 23:58
özcan bilim
02-10-2010, 23:35   |  #4  
OP Taze Üye
Teşekkür Sayısı: 0
19 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

c veya c++ olursa daha iyi olur yinede teşekkürler.

özcan bilim
02-10-2010, 23:38   |  #5  
OP Taze Üye
Teşekkür Sayısı: 0
19 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

teşekkürler muh34 kodda i değeri neden sayi/2 ye kadar geldi acaba.

muh34
02-10-2010, 23:39   |  #6  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

#include <iostream>
using std::cout;
main() {
      
       int sayi=5;
       bool flag=0;
       for(int i=2;i<=sayi/2;i++) {
      if(sayi%i==0)  {
       flag=1;
       break;
       }}
       if(flag==0)
       cout << "Sayi Asaldir\n";
       else
       cout << "Sayi Asal Degildir\n";
       return 0;
       }
Yukarıdaki C dilinde yazılmıs kodun C++ halinide yayınlıyorum.Başarılar

Son Düzenleme: muh34 ~ 02 Ekim 2010 23:57
muh34
02-10-2010, 23:43   |  #7  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Cunku bir sayi kendisinden kucuk en buyuk katına bolunebiliyorsa,kontrolun daha fazla yapılmasına gerek yoktur.Bu da tamsayılar icin maksimum yarısıdır,Pek tabiki yukarıdaki dongu kosulu -> for(i=2;i<sayi;i++) olarakda degistirilebilirdi,bu sekilde de dogru sonuc elbetteki olacaktır.Bunun nedeni sadece CPU kullanımından feragat etmektir.Başarılar

censez41
02-10-2010, 23:48   |  #8  
censez41 avatarı
Yıllanmış Üye
Teşekkür Sayısı: 3
1,705 mesaj
Kayıt Tarihi:Kayıt: Nis 2009

BASİC İLE DAHA KISA OLDU :)))

özcan bilim
03-10-2010, 19:33   |  #9  
OP Taze Üye
Teşekkür Sayısı: 0
19 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

problemi çözdüm.teşekkürler muh34 Allah razı olsun.sanada teşekkürler censez41.

muh34
03-10-2010, 22:32   |  #10  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Ne demek sizdende Allah razı olsun,herhangi bir problemde yazdıgınız zaman yardımcı olmaya calısırım.Başarılar

özcan bilim
10-10-2010, 14:24   |  #11  
OP Taze Üye
Teşekkür Sayısı: 0
19 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

for(i=2;i<=sayi/2;i++) derken i<=sayi/2 mi olacak yoksa i<sayi/2 mi olacak.
yani küçük mü yoksa küçük eşittir mi olacak.

muh34
10-10-2010, 14:35   |  #12  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yukarıdaki algoritmaya gore esittir(=) olacaktır.Başarılar