Çö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.
 

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;
    }
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…