• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby pierwsze

0 głosów
138 wizyt
pytanie zadane 11 lutego w C i C++ przez zuajestem Początkujący (360 p.)

Hej :)

Dla zabawy stworzyłam tyci kod, który powinien stwierdzać czy podana liczba jest liczbą pierwszą, czy też nie jest. 

Powinien działać na zasadzie Testu Fermata, czyli jeśli wczytujemy liczbę n, to każda liczba a z zakresu 1<a<n-1  podczas działania pow(a, n-1) % n powinna dawać wynik 1. To znaczy, reszta z dzielenia każdej liczby spotęgowanej z tego przedziału po prostu ma być równa 1. 

Albo gdzieś omijam sensowny błąd, albo po prostu czegoś nie rozumiem, ale np. gdy podam liczbę n = 7 do sprawdzenia, czy jest liczbą pierwszą, to wg tego schematu program liczy, że 5 do potęgi 6 = 15624, co jest błędne, zamiast 15625, i przez to dostaję zwrot, że 7 nie jest liczbą pierwszą.

Ktoś pomoże?

Tu kod:

#include <iostream>
#include <cmath>
using namespace std;

bool ifprime(int n)
{

int result, prime;
    cin>>n;
    for(int a=1; a<n; a++)
    {
    result = pow(a, n-1);
    cout << "result: " << result << endl;
    prime = result%n;
    cout << result <<"%"<<n<<" = "<< prime << endl;
    if(prime!=1)
    return false;
    }
    return true;
}
int main()
{
int n, times;
cout << "How many numbers?" << endl;
cin >>times;
for(int k=0; k<times; k++)
{
bool check;
check = ifprime(n);

if(check == true)
    cout << "TAK" << endl;
else cout << "NIE" <<endl;
}
return 0;
}

 

1
komentarz 12 lutego przez Hipcio Szeryf (95,020 p.)
  1. Ten kod się nie kompiluje.
  2. Jest tak sformatowany jakbyś chciał specjalnie utrudnić czytanie go wszystkim.
komentarz 12 lutego przez zuajestem Początkujący (360 p.)

 

Nie mam pojęcia czemu Ci się nie kompiluje. Masz może jakąś inną złotą myśl dlaczego może nie działać jak należy?

komentarz 13 lutego przez Hipcio Szeryf (95,020 p.)

1 odpowiedź

0 głosów
odpowiedź 3 kwietnia przez Bondrusiek Maniak (50,420 p.)

Witam,

tak na szybko to znalazłem błąd w Twoim kodzie. Staraj się czytać informacje, które zwraca kompilator w tym błędy lub ostrzeżenia. W tym przypadku mój kompilator zwraca taki komunikat

ostrzeżenie: 'n' may be used uninitialized in this function [-Wmaybe-uninitialized]
 check = ifprime(n);
                   ^

Po przeanalizowaniu tej wiadomości można zauważyć, że wartość n nie posiada żadnej wartości. Spróbuj wyciąć pobieranie wartości z funkcji ifprime

bool ifprime(int n)
{

int result, prime;
    cin>>n; // <--- wytnij to 
    for(int a=1; a<n; a++)
    {...

i wklej ten wiersz do funkcji main

int main()
{
int n, times;
cout << "How many numbers?" << endl;
cin >>times;
for(int k=0; k<times; k++)
{
bool check;
cin >> n; // <--- wklej tu
check = ifprime(n);
...

 

Podobne pytania

0 głosów
3 odpowiedzi 1,290 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Scypyon Gaduła (3,460 p.)
0 głosów
2 odpowiedzi 240 wizyt
pytanie zadane 22 października 2017 w SPOJ przez Łuk Asz Nowicjusz (160 p.)
0 głosów
1 odpowiedź 434 wizyt
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

64,220 zapytań

110,613 odpowiedzi

231,872 komentarzy

46,964 pasjonatów

Przeglądających: 253
Pasjonatów: 21 Gości: 232

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...