Prosti brojevi na datom intervalu – rešenje
Postavka
Učitavaju se dva prirodna broja a i b (a ≤ b). Ispiši sve proste brojeve iz intervala [a, b], po deset u jednom redu.
Primer
Ulaz
1 30Izlaz
2 3 5 7 11 13 17 19 23 29Ideja
Broj je prost ako je veći od 1 i nema delilaca osim 1 i sebe. Delioce je dovoljno tražiti do √b: ako b = d · e i d > √b, onda je e < √b i taj manji delilac bismo već našli. Zato je uslov petlje d * d <= b.
Za veliki interval (na primer do 107) brže je Eratostenovo sito.
Rešenje (C++)
#include <iostream>
using namespace std;
bool prost(long long b) {
if (b < 2) return false; // 0 i 1 nisu prosti
for (long long d = 2; d * d <= b; d++) // dovoljno je proveriti delioce do korena
if (b % d == 0) return false;
return true;
}
int main() {
long long a, b;
cin >> a >> b;
int c = 0; // broj ispisanih prostih brojeva
for (long long i = a; i <= b; i++) {
if (prost(i)) {
cout << i;
c++;
cout << (c % 10 == 0 ? "\n" : " "); // po 10 u redu
}
}
if (c % 10 != 0) cout << "\n";
return 0;
}
Ispravke u odnosu na staru verziju: stara funkcija je broj 1 proglašavala prostim i proveravala sve delioce do samog broja (sporo za velike brojeve).
ALGORITMI ZADATAK 1: "PROSTI BROJEVI NA DATOM INTERVALU" - REŠENJE
#include <iostream>using namespace std;
bool isProst(long long b){
if(b==1 || b==2)return true;
bool r=true;
long d=2;
while(b%d!=0 ){
d++;
}
if(d<b)r=false;
return r;
}
//početak
int main()
{
long long a, b ,c=0;
cin >> a >> b;
for(int i=a; i <= b; i++)
{
if(isProst(i))
{
cout<<i<<" ";
c++;
if(c%10==0)cout<<endl;
}
}
return 0;
}
