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
decToSumaBin
możesz użyć tego http://stackoverflow.com/a/109069/1017941