Witam,
Czy można zastosować sito eratostenesa dla tablicy dynamicznej?
tak
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".
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ć.
"budując liczbę pierwszą dana cyfra może zostać użyta tylko raz" - co ma ilość liczb parzystych do budowania liczb pierwszych ?
przepraszam, "ile liczb pierwszych" powinno być, już poprawiam
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ą ?
tak, chodziło mi o to, że każdą z podanych cyfr możemy wziąć tylko raz
- Czarne czy białe?
- Tak, o to chodziło.
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
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;
}
dziękuje :) a miał bym jeszcze jedna małą prośbę, czy mógłbyś rozpisać mi to jako algorytm. Co po kolei się dzieję
Za odpowiednią opłatą - chętnie.
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!
}
zbudować sito Eratostenesa do maksymalnej wartości z "t" włącznie.
sprawdzić czy elementy z "t" zaznaczone w sicie jako pierwsze.
Proszę o podpowiedź.
Podpowiedź: Zły dział.
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ę ;)