Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
+2 oy
146 gösterim

Bir sayı birbirinden farklı 2 asal sayının çarpımı şeklinde oluşuyorsa o sayıya yarı asal sayı denir.Kullanıcıdan istenilen sayının yarı asal sayı olup olmadığını test eden matlab programını yazınız.

Öncelikle merhaba, ben bu soruyu tüm özellikleri denetlemek yerine bu şekilde yazdım bu algoritma ile 8 harici diğer tüm sayılar sağlandığını düşünüyorum acaba doğru mu bu çözüm değilse neden ? İlginiz için teşekkür ederim. İyi günler.

sayac=0;

if n=8

fprintf('yarı asal değildir');

end

if n<=6

fprintf('6 dan büyük bir sayı giriniz.');

else

for i=1:n

if mod(n,i)==0

sayac=sayac+1;

end

end

if sayac==4

fprintf('yarı asal sayıdır.');

else

fprintf('yarı asal sayı değildir.');

end

end

Algoritma kategorisinde (108 puan) sordu

1 cevap

+1 oy
Selam,

Bir sayının asallığını bulan program yazın diye klişe bir soru vardır ve bildiğim kadarıyla sayının asallığının bulan çok kullanışlı ve performanslı bir yöntem yoktu (matematik dünyasında).

Senin sorun burda iki farklı açıdan incelenmesi gereken bir soru.

- Birincisi verilen sayıyı çarpanlarına ayırmak
- İkincisi bu çarpanların aslında asal mı değil mi olduğunu anlamak.

Senin yazdığın koda baktığım zaman direk elediğim durumlar var

- Ben olsam birden başlamazdım en az ikiden başlardım ki birden başladığın zaman senin sayacını artıracak kafa karışıklığı
- Ben olsam n'ye kadar da gitmezdim n-1 de bırakırdım ki arada bölünebilen sayıları kolayca anlayayım.
- Bundan sonra arada bölme yaparken sonuna kadar denediğin zaman sayı iki den büyük olursa direk olarak yarı asal değildir kararına varabilirsin(bu kısayol olarak güzel olur)
- Eğer sadece bir bölenin çıkarsa sayı başka bir sayının karesi olduğunu anlayacaksın. Sonra o sayı asal mı diye bakman lazım.
- Farz edelim sonuna kadar geldin ve bölen sayısı 2 çıktı, bu durum yarı asal olması için yetiyor mu? Açıklaman itibariyle olmadığını anlıyorum. Çünkü bölenler için de tek tek bakıp asallığını kontrol etmen gerekiyor.

Sen kendine 8 sayısını durum (case) olarak belirlemişsin, sanıyorum 4 * 2  olduğundan iki tane var ama 4 de 2 * 2 olduğu için olmuyor diye düşündün. O zaman ben de şunu düşünüyorum küp olan sayılarda karşılacaksın 27 sayısını dene bakalım senin kodunda nasıl bir tepki veriyor? O da muhtemelen 3 * 9 olarak çıkacak ki bu da yetmiyor.

Başa dönecek olursak önce sayıların bölenlerini bir array'a at ilk tekrar bittikten sonra array içindeki sayıların asal olup olmadığnı kontrol et.

Kolay gelsin.
(3.3k puan) cevapladı

İlgili sorular

0 oy
1 cevap 42 gösterim
0 oy
1 cevap 144 gösterim
144 gösterim 6 Kasım 2017 Genel Kavramlar kategorisinde yildiz (186 puan) sordu
0 oy
1 cevap 49 gösterim
49 gösterim 24 Şubat 2016 Java kategorisinde sevilay (106 puan) sordu
0 oy
1 cevap 30 gösterim
30 gösterim 4 Ocak 2016 C/C++ kategorisinde Batuhan (108 puan) sordu
0 oy
1 cevap 26 gösterim
26 gösterim 5 Ocak Algoritma kategorisinde kenan (3.3k puan) sordu
...