Clasa a X-a · Subprograme (funcții)Read in English
Numere superprime în C++
În engleză: Super-prime numbers
Ideea
Un număr este superprim dacă toate prefixele lui sunt numere prime. De exemplu 239 este superprim: 2, 23 și 239 sunt prime. Funcția estePrim(x) este refolosită de funcția superprim(x), care taie pe rând ultima cifră (x / 10) și verifică fiecare prefix. Se afișează toate numerele superprime mai mici sau egale cu n.
Descrierea în engleză
A number is super-prime if all its prefixes are prime. For example 239 is super-prime: 2, 23 and 239 are prime. The function estePrim(x) is reused by superprim(x), which cuts off the last digit one at a time (x / 10) and checks every prefix. All super-prime numbers less than or equal to n are printed.
- Complexitate
- O(n * k * sqrt(n)), unde k este numărul de cifre
- Clasa
- Clasa a X-a (Grade 10)
- Capitol
- Subprograme (funcții)
Exemple
Intrare
100
Ieșire așteptată
2 3 5 7 23 29 31 37 53 59 71 73 79
Intrare
10
Ieșire așteptată
2 3 5 7
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Numere superprime
* Clasa: 10
* Capitol: Subprograme (funcții)
* Descriere: Un număr este superprim dacă toate prefixele lui sunt numere prime.
* De exemplu 239 este superprim: 2, 23 și 239 sunt prime. Funcția
* estePrim(x) este refolosită de funcția superprim(x), care taie pe rând
* ultima cifră (x / 10) și verifică fiecare prefix. Se afișează toate
* numerele superprime mai mici sau egale cu n.
* Complexitate: O(n * k * sqrt(n)), unde k este numărul de cifre
*
* Exemplu
* Intrare: 100
* Ieșire: 2 3 5 7 23 29 31 37 53 59 71 73 79
*
* Exemplu
* Intrare: 10
* Ieșire: 2 3 5 7
*/
#include <iostream>
using namespace std;
bool estePrim(int x)
{
if (x < 2)
return false;
for (int d = 2; d * d <= x; d++)
{
if (x % d == 0)
return false;
}
return true;
}
bool superprim(int x)
{
while (x > 0)
{
if (!estePrim(x))
return false;
x = x / 10; // trecem la prefixul mai scurt
}
return true;
}
int main()
{
int n;
cin >> n;
for (int x = 2; x <= n; x++)
{
if (superprim(x))
cout << x << ' ';
}
cout << '\n';
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.