Liczba pierwsza - poprawka

0

Liczba "superpierwsza" to liczba pierwsza której suma cyfr jest również liczbą pierwszą.

Liczba „super B pierwsza”, oprócz wymienionych dwóch warunków, spełnia warunek trzeci:

• suma cyfr w jej zapisie binarnym jest także liczbą pierwszą.

Twoim zadaniem jest obliczenie ile liczb "super B pierwszych" jest w podanym przedziale.

Wejście:
W kolejnych liniach dwie liczby oddzielone spacja 1<=a,b<=1000000.

Wyjście:
W kolejnych liniach liczba całkowita, ilość liczb "super B pierwszych" w podanym przedziale.

Przykład
wejście
2 1000
100 10000
10000 100000

wyjście
50
249
1055
kod:

 #include<iostream>
using namespace std;

bool pierwsze (int i)
{    if (i==1) return false;
    if (i%2==0 && i>2) return false;
     for (int p=3;p*p<=i;p+=2)
         if (i%p==0) return false;
         return true;
}

int sumaCyfr (int x)
{
   int s=0;
   while(x>=1)
   {
   s=x%10+s;
   x=x/10;
   }
   return s;
}

 int decToSumaBin (int dec)
{
    int suma=0,n=0;

         while (dec>=1)        {
                   n=dec%2;
                   suma=suma+n;
                   dec=dec/2;
                   }
          return suma;
}


int main()
{
    int a,b,c=0;
while(cin>>a)
       {
        cin>>b;
        
    for (int i=a;i<=b;i++)
        if(pierwsze(i)== true && pierwsze(sumaCyfr(i))==true && pierwsze(decToSumaBin(i))==true) c++;
    cout<<c<<endl;



}
    return 0;
 }

Czy może go ktoś sprawdzić, ponieważ dla przedziału 2 i 3 wypisuje zupełnie co innego

1

Nie zerujesz c po obiegu pętli...

0

dla i=2 funkcja pierwsze(decToSumaBin(i)) zwróci false.

1 użytkowników online, w tym zalogowanych: 0, gości: 1