Liczba pierwsza - poprawka

Liczba pierwsza - poprawka
M2
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Lokalizacja:Tarnów
  • Postów:15
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:

Kopiuj
 #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

hauleth
Zamiast decToSumaBin możesz użyć tego http://stackoverflow.com/a/109069/1017941
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Nie zerujesz c po obiegu pętli...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:około 22 godziny
  • Lokalizacja:Łódź
  • Postów:1402
0

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


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.