Çözüldü C++ Asal Sayı Bulan Program

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Pawey

Decapat
Katılım
8 Haziran 2019
Mesajlar
21
Daha fazla  
Cinsiyet
Erkek
C++'da 0 ile 500 arasında bir sayı girildiğinde 0 ile o sayı arasındaki asal sayıları ekrana veren programı nasıl yazabilirim? Anlatımlı olursa daha iyi olur.
 
Son düzenleyen: Moderatör:
Çözüm
Öncelikle neden %2 diye tuturduğunuzu anlamadım. Anlatır mısınız? @Bellamy

C'de bu şekilde yazdım. C++'da bunların olması gerek diye biliyorum.

C:
#include <stdio.h>
int main(){
    int a,b,c=0,i;
    printf("Lutfen sayi giriniz: ");
    scanf("%d",&a);
    if (a>500 || a<0){
        printf("0 ile 500 arasi sayi girmediniz.");
        return 0;
    }
    for (i=2;i<a+1;i++){
        for (b=2;b<i;b++){
            c=0;
            if (i%b==0){
                c=1;
                break;
            }
        }
        if (c==0)
            printf("%d\n",i);
    }
    return 0;
}
Öncelikle neden %2 diye tuturduğunuzu anlamadım. Anlatır mısınız? @Bellamy

C'de bu şekilde yazdım. C++'da bunların olması gerek diye biliyorum.

C:
#include <stdio.h>
int main(){
    int a,b,c=0,i;
    printf("Lutfen sayi giriniz: ");
    scanf("%d",&a);
    if (a>500 || a<0){
        printf("0 ile 500 arasi sayi girmediniz.");
        return 0;
    }
    for (i=2;i<a+1;i++){
        for (b=2;b<i;b++){
            c=0;
            if (i%b==0){
                c=1;
                break;
            }
        }
        if (c==0)
            printf("%d\n",i);
    }
    return 0;
}
 
Çözüm
C++:
#include <iostream>


using namespace std;

bool isPrime(int number);

int main()
{
    cout << "Limit -> ";
    int limit = 0;
    cin >> limit;
    for (size_t i = 0; i < limit; i++)
    {
        if (isPrime(i))
        {
            cout << i << endl;
        }
    }
}

bool isPrime(int number)
{
    bool flag = true;
    if (number > 2 && number % 2 == 0)
    {
        return false;
    }
    for (int i = 2; i <= sqrt(number); i += 2)
    {
        if (number % i == 0)
        {
            flag = false;
            break;
        }
        if (i == 2)
        {
            i--;
        }
    }
    if (number >= 2)
    {
        return flag;
    }
    else
    {
        return false;
    }
}

cout, cin görmediyseniz. printf, scanf (visual c++ kullanıyorsanız scanf_s) kullanabilirsiniz geri kalan aynı. Bu arada eğer #include <iostream> kullanmıyorsanız #include <math.h> yazmanız gerekiyor.
 
C++:
#include <iostream>


using namespace std;

bool isPrime(int number);

int main()
{
    cout << "Limit -> ";
    int limit = 0;
    cin >> limit;
    for (size_t i = 0; i < limit; i++)
    {
        if (isPrime(i))
        {
            cout << i << endl;
        }
    }
}

bool isPrime(int number)
{
    bool flag = true;
    if (number > 2 && number % 2 == 0)
    {
        return false;
    }
    for (int i = 2; i <= sqrt(number); i += 2)
    {
        if (number % i == 0)
        {
            flag = false;
            break;
        }
        if (i == 2)
        {
            i--;
        }
    }
    if (number >= 2)
    {
        return flag;
    }
    else
    {
        return false;
    }
}

cout, cin görmediyseniz. printf, scanf (visual c++ kullanıyorsanız scanf_s) kullanabilirsiniz geri kalan aynı. Bu arada eğer #include <iostream> kullanmıyorsanız #include <math.h> yazmanız gerekiyor.

En mantikli yol bu. Yalniz for condition i icerisinde sqrt alinca onu her iterasyonda execute ediyor olabilir, compiler optimize etmiyor olabilir onu. Variable a alip oraya constant eklemek daha dogru sanki. Mobildeyim, compiler ciktisina bakmak gerek.
 
En mantikli yol bu. Yalniz for condition i icerisinde sqrt alinca onu her iterasyonda execute ediyor olabilir, compiler optimize etmiyor olabilir onu. Variable a alip oraya constant eklemek daha dogru sanki. Mobildeyim, compiler ciktisina bakmak gerek.
Haklısınız. Her condition kontrolünde tekrardan sqrt() hesabı yapıyor olabilir.
sqrt maliyetli bir fonksiyon boş yere tekrar tekrar hesaplamak mantıklı değil.
Kod:
#include <iostream>

using namespace std;

bool isPrime(int number);

int main()
{
    cout << "Limit -> ";
    int limit = 0;
    cin >> limit;
    for (size_t i = 0; i < limit; i++)
    {
        if (isPrime(i))
        {
            cout << i << endl;
        }
    }
}

bool isPrime(int number)
{
    bool flag = true;
    if (number > 2 && number % 2 == 0)
    {
        return false;
    }
    const int numberLimit = sqrt(number);
    for (int i = 2; i <= numberLimit; i += 2)
    {
        if (number % i == 0)
        {
            flag = false;
            break;
        }
        if (i == 2)
        {
            i--;
        }
    }
    if (number >= 2)
    {
        return flag;
    }
    else
    {
        return false;
    }
}
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı