Ahojte, prosim o pomoc s tymto prikladom. Spravil som ho po svojom, ale chcel by som ho spravit podla zadania, co sa mi akosi nedari. Zvlast pre tuto vetu:
Citácia:
Použite podobný algoritmus ako Eratostenovo sito, iba namiesto poľa logických hodnôt použite pole hodnôt typu int,
A obvzlast pre slovo:
Citácia:
iba
Mozno sa az moc zaoberam podrobnostami, ale o tom to je, ci? Inak chapem to dobre, ze pole logickych hodnot su tie booly?
Tu je zadanie:
V tomto príklade využijeme podobný postup ako Eratostenovo sito, aby sme pre každé číslo z rozsahu 2 až n zistili, koľkými rôznymi prvočíslami je deliteľné. Napríklad číslo 12 má delitele 1, 2, 3, 4, 6, a 12. Z toho iba 2 a 3 sú prvočísla, je teda deliteľné dvomi rôznymi prvočíslami. Na vstupe je číslo n, pričom platí, že 2 ≤ n ≤ 1000. Pre každé číslo od 2 po n vypíšte na výstup počet jeho prvočísených deliteľov vo formáte podľa príkladu.
Algoritmus:
Použite podobný algoritmus ako Eratostenovo sito, iba namiesto poľa logických hodnôt použite pole hodnôt typu int, v ktorom si pre každé číslo i pamätáte, koľko ste doteraz našli jeho prvočíselných deliteľov. Keď potom nejaké číslo vyhlásite za prvočíslo, namiesto “škrtania” jeho násobkov im zvýšte počítadlo prvočíselných deliteľov o 1.
Programy, ktoré použijú iný postup, nezískajú plný počet bodov.
Príklad vstupu: 30
Príklad výstupu: 2:1 3:1 4:1 5:1 6:2 7:1 8:1 9:1 10:2 11:1 12:2 13:1 14:2 15:2 16:117:1 18:2 19:1 20:2 21:2 22:2 23:1 24:2 25:1 26:2 27:1 28:2 29:1 30:3
Tu je Eratostenovo sito:
Kód:
#include <iostream>
using namespace std;
int main() {
const int n = 30;
bool a[n + 1];
for (int i = 2; i <= n; i++) {
a[i] = true;
}
for (int i = 2; i <= n; i++) {
if (a[i]) {
cout << i << " ";
for (int j = 2 * i; j <= n; j = j + i) {
a[j] = false;
}
}
}
cout << endl;
}
vystup: 2 3 5 7 11 13 17 19 23 29, cize naslo vsetky prvocisla od 2 po n.
A moj program, ktory pracuje, ale spravil som ho inak ako je pisane v zadani:
Kód:
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Zadajte cislo 'n' od 2 po 1000: ";
cin >> n;
while (n < 2 || n > 1000)
{
cout << "Zadali ste nespravne cislo 'n'! " << endl;
cout << "Zadajte znovu cislo 'n' od 2 po 1000: ";
cin >> n;
}
bool a[n + 1];
int pole[n + 1] = {0};
for (int i = 2; i <= n; i++)
{
a[i] = true;
}
for (int i = 2; i <= n; i++)
{
if (a[i])
{
for (int k = 2; k <= n; k++)
{
if (k % i == 0)
{
pole[k] += 1;
}
}
for (int j = 2 * i; j <= n; j = j + i)
{
a[j] = false;
}
}
cout << i << " : " << pole[i] << " ";
}
cout << endl;
return 0;
}
Dakujem za rady, som zaciatocnik.