Bir Sayının Tek Mi Çift Mi Oldugunu Gösteren Program
-
kuytul bunu yazdı:
-----------------------------kodlama mantığı txt'in dediği gibi. yalnız 10 rakamlı bir şey yazınca yazılım kitlenir mi acaba. yüksek sayılarda deniyebilir misin.
-----------------------------Bence de bir denenmeli. 10 değil 100 haneli bir değer girince ne yapacak? Bir deneyip sonucu yazarsa seviniriz.
-
RootB bunu yazdı:
-----------------------------
kuytul bunu yazdı:
-----------------------------kodlama mantığı txt'in dediği gibi. yalnız 10 rakamlı bir şey yazınca yazılım kitlenir mi acaba. yüksek sayılarda deniyebilir misin.
-----------------------------Bence de bir denenmeli. 10 değil 100 haneli bir değer girince ne yapacak? Bir deneyip sonucu yazarsa seviniriz.
-----------------------------
işlemcinin guvvatı mühim oluyor o konuda sanırım :) -
RootB bunu yazdı:
-----------------------------kuytul bunu yazdı:
-----------------------------kodlama mantığı txt'in dediği gibi. yalnız 10 rakamlı bir şey yazınca yazılım kitlenir mi acaba. yüksek sayılarda deniyebilir misin.
-----------------------------Bence de bir denenmeli. 10 değil 100 haneli bir değer girince ne yapacak? Bir deneyip sonucu yazarsa seviniriz.
-----------------------------100 haneli sayıyı nereye giriyosun hocam yavaş gel. o kadar büyük sayıyı taşıyacak tip mi var. yalnız benim programım 30 haneli sayılarda bile aynı sürede işlem yapıyor TxT nin kini denemek lazım.
-
g2k bunu yazdı:
-----------------------------RootB bunu yazdı:
-----------------------------kuytul bunu yazdı:
-----------------------------kodlama mantığı txt'in dediği gibi. yalnız 10 rakamlı bir şey yazınca yazılım kitlenir mi acaba. yüksek sayılarda deniyebilir misin.
-----------------------------Bence de bir denenmeli. 10 değil 100 haneli bir değer girince ne yapacak? Bir deneyip sonucu yazarsa seviniriz.
-----------------------------100 haneli sayıyı nereye giriyosun hocam yavaş gel. o kadar büyük sayıyı taşıyacak tip mi var. yalnız benim programım 30 haneli sayılarda bile aynı sürede işlem yapıyor TxT nin kini denemek lazım.
-----------------------------30 haneliyi aynı sürede tamamlıyorsa sorun yok.
-
Talesin müridleri bir sayısının tek mi çift mi olduğunu taşlar sayesinde anlarlarmış :\
Bir grup taşı alıp eşleştirirlermiş. Eğer boşta sayı kalırsa o sayı tek sayı olurmuş. Ancak boşta sayı kalmazsa sayı çiftmiş :| Tabii konuyla alakası yok ama bildiğim bir bilgiyi paylaşmak istedim :D
-
@kuytul büyük sayılarda denemek istersen veri tipini değiştirmen gerekir.. Bazı veri tipleri şu aralıkta incelemek istersen..
long 64 bit -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807
int 32 bit -2,147,483,648 ile 2,147,483,647
short 16 bit -32,768 ile 32,767
byte 8 bit -128 ile 127
double 64 bit 4.9e-324 ile 1.8e+308
float 32 bit 1.4e-045 ile 3.4e+038 -
Oncelikle bir sayinin cift mi, tek mi oldugunu anlamak icin cok daha performansli ve basit bir yol var, ve tahminimce mod 2 yaptiginiz sey compiler bu sekilde makine diline ceviriyordur.
1) Bir sayinin tek olmasi icin, 2 lik sistemdeki son bitinin 1 olmasi gerekmektedir, 0001(1) 0011(3) 0101(5) 0111(7) sayilari gibi.
2) Ozaman biz sadece aldigimiz sayinin son bitinin 1 veya 0 olmadigini kontrol ederek o sayinin cift olup olmadigini anliyabiliriz.
3) Bunu yapmak icin o sayinin ilk bit basamaklarini gormezden gelip oyle birsey yapalim ki, yani maskeliyelim ki, son basamak haric her bit 0 olsun. Sadece son basamak 1 ise 1 olarak kalabilsin.
4) Bit wise AND islemi ile bunu yapabiliriz "&" ( tek and isareti bu anlama geliyor dillerin cogunda)
Ornek olarak 32 basamakli 2 lik tabanda bir sayi yaziyorum
100101001010101111001010010100101 // bu sayi tek cunku son basamaginda 1 var, ve sadece son basamagindakini almak icin maskeliyecem alttaki sayi ile
&
000000000000000000000000000000001
----------------------------------------------------
000000000000000000000000000000001 karsimiza yeniden 1 geldi :) boylece anladikki bu sayi tek. halbuki son basamak 0 olsaydi, sayi tamamen 0 olucakti.
O halde;
if( KULLANICIDAN_ALDIGIMIZ_SAYI & 1 )
{
TEK SAYI ISLEMLERI BURAYA
}
else
{
CIFT SAYI ISLEMLERI BURAYA
}
Boylece mod almadan veya herhangi bir islem kullanmadan bir sayinin tek veya cift oldugunu anlamis olduk. Bunu labda odev yazarken kesfedip yuksek puan almistim :) ama sonra baktigimda zaten benden onceki genclik coktandir kullaniyormus :) herneyse.
Asal sayi icin ise soyle birsey diyebilirim; daha dogrusu asal sayilar icin matematiksel bir teorem mi denir tam bilemiyorum ama bir matematiksel dogruluk kabul
ediliyor. Bir sayi kokune kadar olan sayilara bolunmuyorsa, o sayi asal sayidir. Bu ispatlanmisti suana kadarki toplam islem hacminin gelen son noktasina kadar :)
O halde soyle yapicaz, diyelim ki kullanici 100 girdi, bunu koku 10, o halde 2 den basliyarak 10 a kadar 100 u bolmeye calisiyoruz.
Kullanici 150 girmisse, koku 12.247 yapiyor biz bunu floor degilde yukariya aliyoruz yani ceil deniyor. C++ ta math.h in icinde ceil(sayi); diye tanimli bir fonksiyonu var hatirladigim.
O halde yapicagin is, kullanici sayiyi girdigi andan itibaren, once girdigini sayinin kokunu bulmak. Bulduktan sonra 2 den baslayip koke kadar bu sayiyi loop icinde modlamak, ta ki mod 0 cikana kadar. Eger koke kadar 0 cikmissa sayi asal degil, cikmamissa gonul rahatligi ile sayi asaldir diyebilirsin.
-
TxT bunu yazdı:
-----------------------------@kuytul büyük sayılarda denemek istersen veri tipini değiştirmen gerekir.. Bazı veri tipleri şu aralıkta incelemek istersen..
long 64 bit -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807
int 32 bit -2,147,483,648 ile 2,147,483,647
short 16 bit -32,768 ile 32,767
byte 8 bit -128 ile 127
double 64 bit 4.9e-324 ile 1.8e+308
float 32 bit 1.4e-045 ile 3.4e+038
-----------------------------hocam seninki çok büyük sayılarda performans kaybı olur. bir sayıyı kendinden önceki bütün sayılara bölmek var, sadece bir fazlasını ve bir eksiğini 6 ya bölmek var.
-
@SpArK hocam eline sağlık hocam güzel yöntemler :)
@g2k evet hocam biraz meşakatli malesef
-
tebrikler spark asal sayı için sayının köküne kadar böldürme fikri güzel :) şu anda bi işime yarayacağundan değil de merak ettiğimden sormuştum beyin fırtınası oldu :P