Wątek przeniesiony 2019-01-11 08:24 z C# i .NET przez Adam Boduch.

Sprawdzanie czy liczba jest pierwsza

Odpowiedz Nowy wątek
2019-01-11 03:04
0

Robię zadanie ktorego celem jest sprawdzenie czy liczba jest pierwsza. Najpierw wpisuje ilosc liczb w tablicy, potem kolejno pozycje w tablicy. Program sprawdza, a nastepnie wypisuje po kolei czy liczba jest pierwsza.

Np:
Wpisuje 2 3 6
Wyswietla sie 1 0

int pierwsza(int tab[], int n)
{

   for (int i=0;i<n;i++){

    if (tab[i]<2){
       cout<<"0 ";
   }
   for(int j=2;j*j<=tab[i];j++)
   {

   if (tab[i]>=2 && tab[i]%j==0 ) 
   {
    cout<<"1 ";
   }
   }
   }}

Program wyswietla tylko 1 liczbe, mimo ze jest wiecej indeksow w tabeli

edytowany 2x, ostatnio: Adam Boduch, 2019-01-11 08:25

Pozostało 580 znaków

2019-01-11 10:37
1

Po pierwsze obowiązkowo obejrzyj to.
Po drugie sformatuj ten kod (twoje IDE powinno to potrafić jak nie to użyj: http://format.krzaq.cc/), co da np:

int pierwsza(int tab[], int n)
{
    for (int i = 0; i < n; i++) {
        if (tab[i] < 2) {
            cout << "0 ";
        }

        for (int j = 2; j * j <= tab[i]; j++) {

            if (tab[i] >= 2 && tab[i] % j == 0) {
                cout << "1 ";
            }
        }
    }
}

Po trzecie ta twoja funkcja nie robi nic związanego ze swoją nazwą. Zamiast cout pewnie miało być coś innego.
Najlepiej podziel to na mniejsze funkcję tak (będzie ci łatwiej ogarnąć):


bool pierwsza(int x)
{
     ....
}

void drukujCzyPierwsze(int tab[], int n)
{
    for (int i = 0; i < n; i++) {
          if (pierwsza(tab[i])) {
              cout << "1 ";
          } else {
              cout << "0 ";
          }
    }
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22, 2019-01-11 10:41

Pozostało 580 znaków

2019-01-11 11:08
0
bool f5(int n, int tab[]) {
    for (int j = 0; j < n; j++) {

        if(tab[j]<2)
            return false; 

        for(int i=2; i*i<=tab[j]; i++)
            if(tab[j]%i==0)
                return false; 
        return true;
    }
}

void WyswietlCzyPierwsza(int tab[], int n) {
    for (int i = 0; i < n; i++) {
        if (f5(n, tab)) {
            cout << "1 ";
        } else {
            cout << "0 ";
        }
    }
}

Teraz mam 2 takie funkcje, ale problem jest taki ze wyswietla dla np ciagu licz 3 8 12 14 jakby wszystkie byly pierwsze.

edytowany 2x, ostatnio: fredek13, 2019-01-11 11:40
dałem ci prototyp funkcji a ty go zmieniłeś. Po kiego grzyba potrzebna ci tablica jako argument w f5 (za nazwę powinieneś dostać kopa w ...). - MarekR22 2019-01-11 11:42

Pozostało 580 znaków

2019-01-11 11:45
0

Czyli lepiej dac petle przed funkcje?

Pozostało 580 znaków

2019-01-11 11:49
0
fredek13 napisał(a):

Czyli lepiej dac petle przed funkcje?

he?

W tej tablicy masz liczby do przetestowania. To czy druga liczba jest pierwsza czy nie, nie ma wpływu na to, czy piąta liczba jest pierwsza czy nie.
Ergo żeby sprawdzić czy liczba jest pierwsza nie jest ci potrzebna, żadna inna.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2019-01-11 11:55
0

Ale skoro w tablicy jest pare liczb, to pare razy musi sprawdzic czy jest pierwsza

po to masz pętlę w drukujCzyPierwsze - MarekR22 2019-01-11 12:04

Pozostało 580 znaków

2019-01-11 12:35
0

Przecież, Masz rozwiązanie powyżej, dodam Ci tylko trochę lepszą niż naiwna funkcję testującą pierwszość:

#include <stdio.h>

typedef unsigned long long int ull_int;

int prime_test(ull_int n){
    if (n <= 3) return n > 1;
    else if ( (n % 2 == 0) || (n % 3 == 0) ) return 0;
    ull_int i = 5;
    while ( i * i <= n){
        if ( (n % i == 0) || ( n % (i + 2) == 0) )
            return 0;
        i += 6;
    }
    return 1;
}

void primesArray(ull_int * arr, int len) {
    for (int i = 0 ;i < len ; i++) {
        if (prime_test(arr[i]))
            printf("%d ", 1);
        else 
            printf("%d ", 0);
    }
    printf("\n");
}
int main(){
    ull_int tab[6] = {2, 10, 3, 1, 137, 90};
    primesArray(tab, sizeof(tab) / sizeof(tab[0]));
    // -> 1 0 1 0 1 0
    return 0;
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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