sito eratostenesa pytanie

0

Witam,
Czy można zastosować sito eratostenesa dla tablicy dynamicznej?

0

tak

0

Oczywiście że NIE.
Sito Eratostenesa stosuje się do znalezienia liczb pierwszych, dla tablicy dynamicznej nie da się.
Może powiedz co miałeś na myśli pisząc: - "zastosować sito eratostenesa dla tablicy dynamicznej".

0

więc może nie będę zakładał nowego tematu tylko tutaj przedstawię cały mój problem, otóż chce napisać program w którym osoba podaje liczbę naturalna a program liczy ile liczb pierwszych może powstać z cyfr tej liczy przy założeniu, że budując liczbę pierwszą dana cyfra może zostać użyta tylko raz, nie mam pomysłu jak to zrobić.

0

"budując liczbę pierwszą dana cyfra może zostać użyta tylko raz" - co ma ilość liczb parzystych do budowania liczb pierwszych ?

0

przepraszam, "ile liczb pierwszych" powinno być, już poprawiam

0

Nadal zadanie nie zbyt jasne. Nie sprecyzowałeś "dana cyfra" - czyli jeżeli jakaż cyfra występuje więcej niż raz to może ona wystąpić nie więcej niż raz czy może wystąpić nie więcej niż ilość wystąpień w podanej liczbie. Np: jeżeli podana liczba to 991 to czy można policzyć liczbę 199 jako liczbę pierwszą ?

0

tak, chodziło mi o to, że każdą z podanych cyfr możemy wziąć tylko raz

0
  • Czarne czy białe?
  • Tak, o to chodziło.
0

no ale przecież piszę, że z każdą z podanych cyfr można wziąć tylko raz, wiec w sytuacji 991 9-biore raz, 9- biore raz i 1-biore raz

0
unsigned mask=0;
while(((ch=getchar())!='\n')&&(isdigit(ch))) mask|=(1<<(ch-'0')); // ewentualnie ch=cin.get()
unsigned max=0;
for(int i=9;i>=0;++i) if(mask&(1<<i)) max=max*10+i;
// wypełniasz sito do max włącznie
for(/*dla każdej liczby pierwszej x*/) // można połączyć z wypełnieniem sita
  {
   unsigned maskX=0;
   while(X)
     {
       unsigned m=(1<<(X%10));
       if(maskX&m) { maskX=0; break; }
       maskX|=m;
       X/=10; 
     }
   if(mask==maskX) ++licznik;
  }
0

dziękuje :) a miał bym jeszcze jedna małą prośbę, czy mógłbyś rozpisać mi to jako algorytm. Co po kolei się dzieję

0

Za odpowiednią opłatą - chętnie.

0

Mam problem. Nie wiem w jaki sposób w poniższym programie wypisać liczby pierwsze z wcześniej wylosowanych liczb umieszczonych w tablicy. Proszę o podpowiedź.

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstdlib>
#include <math.h>

using namespace std;

void wypelnianie_losowe (int t[], int a, int b);
void wyswietlanie_tablicy (int t[], int b);
float srednia (int t[], int b);
float odchylenie (int t[], int b, float m);
void liczby_pierwsze (int t[], int b);

int main()
{
int b;
char wybor;
char zakonczenie;

cout << "Jak duża ma być tablica? Podaj liczbę: ";
cin >> b;
int t[b];

wypelnianie_losowe (t, 100, b);
wyswietlanie_tablicy (t, b);
float m = srednia(t, b);

do
    {
        cout << "Jaką funkcję ma wyliczyć program? Wybierz s - srednia, o - odchylenie standardowe, p - liczby pierwsze: ";
        cin >> wybor;
            switch (wybor)
                {
                    case 's':
                        cout << "Srednia wynosi: " << srednia (t, b) << endl;
                        break;
                    case 'o':
                        cout << "Odchylenie standardowe wynosi: " << odchylenie (t, b, m)<< endl;
                        break;
                    case 'p':
                        liczby_pierwsze (t, b);
                        break;
                }
        cout << "Wykonywać kolejne funkcje, czy zakonczyc dzialanie programu? Kontynuowac t/n?: ";
        cin >> zakonczenie;
    }
while (zakonczenie!='n');
cout << "Koniec programu!";

return 0 ;
getchar();

}

void wypelnianie_losowe (int t[], int a, int b)
{
int nWylosowana;
srand((int) time(NULL)) ;

for (int i = 0; i < b; i++)
{
    nWylosowana = rand() % a;
    t[i] = nWylosowana;
}

}

void wyswietlanie_tablicy (int t[], int b)
{
for (int i = 0; i < b; i++)
cout << "Element " << i << " wynosi: " << t[i] << endl;
}

float srednia (int t[], int b)
{
float sum = 0;
int i;
for(i = 0; i < b; i++)
{
sum = sum + t[i];
}
return (sum / b);
}

float odchylenie (int t[], int b, float m)
{
float war = 0;
int i;
for(i = 0; i < b; i++)
{
war = war + ((t[i] - m)*(t[i] - m));
}
return (sqrt(war/b));
}

void liczby_pierwsze (int t[], int b)
{
POMOC!
}

0

zbudować sito Eratostenesa do maksymalnej wartości z "t" włącznie.
sprawdzić czy elementy z "t" zaznaczone w sicie jako pierwsze.

0

Proszę o podpowiedź.

Podpowiedź: Zły dział.

0
programista1601 napisał(a):

w sytuacji 991 9-biore raz, 9- biore raz i 1-biore raz
Czy nie chodzi przypadkiem o to, że w tej sytuacji możemy wziąć dziewiątkę DWA razy? Jeśli tak, to @_13th_Dragon podał nie ten kod o który Ci chodziło i jest to tylko i wyłącznie Twoja wina, a na jego miejscu wkurzyłbym się ;)

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