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

Liczby pierwsze

VPS Starter Arubacloud
0 głosów
216 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ź 368 wizyt
pytanie zadane 19 sierpnia 2020 w SPOJ przez Billy Użytkownik (680 p.)
0 głosów
3 odpowiedzi 5,944 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Scypyon Gaduła (3,450 p.)
0 głosów
2 odpowiedzi 674 wizyt
pytanie zadane 22 października 2017 w SPOJ przez Łuk Asz Nowicjusz (160 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...