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

Liczby pierwsze

Object Storage Arubacloud
0 głosów
221 wizyt
pytanie zadane 11 lutego 2019 w C i C++ przez zuajestem Początkujący (410 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 2019 przez niezalogowany
  1. Ten kod się nie kompiluje.
  2. Jest tak sformatowany jakbyś chciał specjalnie utrudnić czytanie go wszystkim.
komentarz 12 lutego 2019 przez zuajestem Początkujący (410 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 2019 przez niezalogowany

1 odpowiedź

0 głosów
odpowiedź 3 kwietnia 2019 przez Bondrusiek Maniak (61,370 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
1 odpowiedź 376 wizyt
pytanie zadane 19 sierpnia 2020 w SPOJ przez Billy Użytkownik (680 p.)
0 głosów
3 odpowiedzi 5,969 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Scypyon Gaduła (3,450 p.)
0 głosów
2 odpowiedzi 677 wizyt
pytanie zadane 22 października 2017 w SPOJ przez Łuk Asz Nowicjusz (160 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...