Program Liczby pierwsze

0

Witam. Otóż jestem całkowicie nowy na forum. Ucze się języka c++ dopiero od niedawna i mam problem. Mam zrobić program mówiący czy dana liczba jest pierwsza czy nie. Czy byłby mi ktoś w stanie powiedziec gdzie robię błąd?

#include <iostream>
#include <cmath>
using namespace std;
bool a(float x)
{
float d= sqrt(x);
int a=2;
while(x%a!=0)
a++;
if(a>d)
return true;
else 
return false;}
int main()
{
    int g;
    cin>>g;
    if(a(g))
    cout<<"Liczba jest pierwsza";
    cin.ignore();
    getchar();
    return 0;}
0

Czytaj komunikaty kompilatora.
Nie możesz dzielić modulo liczby zmiennoprzecinkowej

Dodatkowa rzecz, która gryzie w oczy to formatowanie kodu.

Sprawdzanie czy liczba jest liczbą pierwszą dotyczy tylko liczb naturalnych. W informatyce INTEGER czyli całkowitych.

Przebudowałem Twoją wersję (jeśli potrzebujesz dodaj sobie funkcję, żeby Ci zatrzymało na końcu program):

#include <iostream>
#include <cmath>
using namespace std;
bool check(int x)
{
    float d = sqrt(x);
    int a=2;
    while(x%a != 0)
    a++;
    if(a>d)
        return true;
    else 
        return false;
}
int main()
{
    int g;
    cin>>g;
    if(check(g))
        cout<<"Liczba jest pierwsza" << endl;
        
    return 0;
}
0

Wiem, że można tylko zmienne całkowitoliczbowe, ale nie wiem jak poprawić ten program :(

0
BanachooPL napisał(a)

ale nie wiem jak poprawić ten program :(

Patrz wyżej, edytowałem posta

0

float d = sqrt(x); - przy tej linijce krzyczy :(

0
BanachooPL napisał(a)

float d = sqrt(x); - przy tej linijce krzyczy :(

Jakiego używasz kompilatora?
Daj komunikat kompilatora

0

Dev c++
" call of overloaded 'sqrt (int&)' is ambiguous "

0
float d = sqrt((float)x);
0

Teraz gdy kompiluje program i wpisuje liczbę myśłi. I to bardzo długo.

0
BanachooPL napisał(a)

Dev c++
" call of overloaded 'sqrt (int&)' is ambiguous "

Także na devie to testowałem i poszło elegancko. Dałeś ten kod?

#include <iostream>
#include <cmath>
using namespace std;
bool check(int x)
{
    float d = sqrt(x);
    int a=2;
    while(x%a != 0)
    a++;
    if(a>d)
        return true;
    else 
        return false;
}
int main()
{
    int g;
    cin>>g;
    if(check(g))
        cout<<"Liczba jest pierwsza" << endl;
 
    return 0;
}

EDIT:

lukasz1235 napisał(a)
float d = sqrt((float)x);

Przecież funkcja sqrt zwraca float. Trzeba to rzutować?

0

Tak. Dev 4.9.9.0

0

To dziwne, bo u mnie gra.
Spróbuj tak:

bool check(int x)
{
    double d;
    int a=2;
    d = sqrt(x);
    
    while(x%a != 0)
        a++;
    if(a>d)
        return true;
    else 
        return false;
}
0

Niestety dalej drze się o d = sqrt(x);
Call of overloaded...

1

Wywal DEV-a, zainstaluj Eclipse CDT lub Code::Blocks

1 użytkowników online, w tym zalogowanych: 0, gości: 1