Hocam tavsiye için teşekkürler ama benim kodumda hata tam olarak nerede?
Kodunuzdaki temel sorun, isPrime değişkenini her yeni sayı için true olarak başlatmamanız. Böylece, eğer bir kez isPrime false olarak ayarlanırsa, o ve sonraki tüm sayılar için asal olmayan olarak kalır. Bu, algoritmanın doğru çalışmamasına yol açar. Ayrıca, asal sayı kontrolü için yarıya kadar gitmek yerine, sayının kareköküne kadar gitmek yeterli ve daha verimli olacaktır. İşte kodunuzdaki hata:
for (int i = num1 ; i <=num2 ; ++i ) {
for (int f =2 ; f <= i / 2; ++f) {
if (i%f==0) {
isPrime = false;
break ;
}
}
if (isPrime==true ) {
cout << i << endl ;
}
}
Her bir i için isPrime değişkenini true olarak başlatmanız gerekiyor. Ayrıca, i'nin yalnızca kareköküne kadar olan sayılara bölünüp bölünmediğini kontrol etmelisiniz. İşte düzeltilmiş hali:
for (int i = num1; i <= num2; ++i) {
bool isPrime = true; // Her sayı için bu değeri true olarak başlatın.
if (i < 2) isPrime = false; // 2'den küçük sayılar asal değildir.
for (int f = 2; f <= sqrt(i); ++f) { // Kareköküne kadar kontrol edin.
if (i % f == 0) {
isPrime = false;
break;
}
}
if (isPrime) { // Eğer isPrime hala true ise, sayı asaldır.
cout << i << endl;
}
}