Merhaba arkadaşlar, visual studio da girilen sayıdan sonraki 5 asal sayıyı yazdırmak için özyinelemeli kod yazıyordum ama ekteki hatayı aldım. lütfen yardım.
#include <iostream> using namespace std; /*Klavyeden girilen bir sayıdan sonraki ilk 5 asal sayıyı bulan ve ekranda gösteren C veya C++ kodunu yazınız. */
int asal1(int x, int i) {
if (x < 2) return 0; if (x % i == 0) return 0; if (i == 1) return 1; return asal1(x, i - 1);
}
int main() {
setlocale(LC_ALL, "Turkish"); int girdi, sayac = 0, sonuc;
cout << "sayıyı girin : "; cin >> girdi; cout << "sonraki 5 asal sayı : "; girdi++; for (; sayac < 5; girdi++) {
sonuc = asal1(girdi, girdi / 2); if (sonuc == 1) { cout << girdi << "\t"; sayac++; } }
Daha farklı asal sayı belirleme yöntemleri olsa da en klasik yöntem şu :
bool asal(int x) { for (int d = 2; d * d <= x; d++) { if (x % d == 0) return false; } return true; }
Ama mesajda belirtildiği gibi yapacaksanız,
if (x % i == 0) return 0; if (i == 1) return 1;
bu iki if'in yerini değiştirmeniz lazım.
x asal sayı bile olsa i 1'e ulaştığı için x%i == 0 her zaman true dönüyor, dolayısıyla hiçbir sayıyı asal olarak bulamıyor, bu da sonsuz döngüye giriyor. Hata burada. bu iki if'in sırası değişmeli.
Bende o günün sabahına farkettim hatayı. E-posta bildirimi almadığım için mesajınızı yeni gördüm. Geç kalınmış bir teşekkür olsa da cevapladığınız için çok teşekkür ederim. ;)
< Resime gitmek için tıklayın >
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.