Rezolvare completă PbInfo #3081 TruncatableLeft

Cerința

Un număr prim se numește trunchiabil-stânga dacă, prin eliminare repetată a primei cifre, toate numerele rezultate sunt prime.
Se dă un număr natural, să se verifice dacă numărul este prim trunchiabil-stânga.

Date de intrare

Programul citește un număr natural nenul n.

Date de ieșire

Programul va afișa DA dacă n este prim trunchiabil-stânga, altfel va afișa NU.

Restricții și precizări

  • n este mai mic decât 1.000.000.
  • Cel mai mare prim trunchiabil-stânga este 357686312646216567629137.

Exemplu 1:

Intrare

1223

Ieșire

DA

Exemplu 2:

Intrare

263

Ieșire

NU

Explicație

Exemplu 1: 1223 e prim. Eliminăm 1, 223 e prim. Eliminăm 2, 23 e prim. Eliminăm 2, 3 e prim.
Deci, numărul 1223 e prim trunchiabil-stânga.
Exemplu 2: 263 e prim. Eliminăm 2, dar 63 nu e prim.
Deci, 263 nu e prim trunchiabil-stânga.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema TruncatableLeft:

#include <iostream>

using namespace std;

bool is_prime(int x){
    if(x < 2)
        return 0;
    if(x != 2 && x % 2 == 0)
        return 0;
    for(int d = 3; d * d <= x; d += 2)
        if(x % d == 0)
            return 0;
    return 1;
}

int nr_digits(int x)
{
    int cnt = 0;
    do{
        x /= 10;
        cnt++;
    }
    while(x);
    return cnt;
}

int pow10(int x)
{
    int r = 1;
    for(;x;--x)
        r *= 10;
    return r;
}

void removeFirstDigit(int &n)
{
    if(n < 9)
    {
        n = 0;
        return;
    }
    int nrdig = nr_digits(n);
    n = n % pow10(nrdig - 1);
}
int main()
{
    int n; cin >> n;
    bool pp = true;

    while(n)
    {
        if(!is_prime(n))
            pp = false;
        removeFirstDigit(n);
    }

    cout << (pp ? "DA" : "NU");
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3081 TruncatableLeft

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3081 TruncatableLeft de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!