dev-c++ liczba "super pierwsza"

0

Liczba „super pierwsza”, to taka liczba naturalna, która spełnia następujące warunki:

• jest liczbą pierwszą

• suma cyfr tej liczby 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ą.

mam o to takie zadanie.. wie moze ktos jak to zrobic..?
a) Dla każdego z podanych niżej przedziałów oblicz i wypisz, ile jest liczb „super B pierwszych”

w tym przedziale.

  1. 2-1000

  2. 100-10000

  3. 1000-100000

Umieść wszystkie liczby „super B pierwsze” odpowiednio z przedzia łów 1., 2. i 3. w 3 różnych tabelach

b) Odpowiedz na następujące pytania:

Ile jest liczb w przedziale <100,10000>, których suma cyfr jest liczbą pierwszą?

Czy suma wszystkich liczb „super B pierwszych” z przedziału <100,10000> jest liczbą pierwszą?

0

Jak to zrobić? Brutem, nie ma jak przypuszczam innej metody.
Bierzesz kolejne liczby pierwsze (trywialny problem, który był wałkowany na forum milion razy) i sprawdzasz czy dana liczba spelnia dodatkowe warunki. Do zamiany liczby na stringa mozesz użyc stringstream, a potem zamieniać poszczególne cyfry na liczby i sumować cyfry danej liczby w ten sposób. Pierwszośc tej sumy sprawdzisz tak jak pierwszość każdej innej liczby. Zamiana liczby na jej binarną reprezentacje też do trudnych nie nalezy i była na forum milion razy, a tu interesuje cie tylko suma

int suma=0;
while(liczba)
{
suma+=liczba%2;;
liczba/=2;
}
//i sprawdzasz czy suma jest liczbą pierwszą
0
#include<iostream>
using namespace std;

bool pierwsze (int i) //sprawdza czy dana liczba jest pierwsza
{    if (i==1) return false;
     if (i%2==0 && i>2) return false;
     for (int p=3;p*p<=i;p+=2) //p+=2 <=> p=p+2
         if (i%p==0) return false;
         return true;
}

int sumaCyfr (int x) //zwraca wartość sumy cyfr
{  
   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;
    cout<<"Podaj dolny zakres przedzialu"<<endl;
        cin>>a;
    cout<<"Podaj gorny zakres przedzialu"<<endl;
        cin>>b;
        cout<<endl;
    for (int i=a;i<=b;i++)
        if(pierwsze(i)== true && pierwsze(sumaCyfr(i))==true && pierwsze(decToSumaBin(i))==true)
                         {cout<<i<<endl;
                          c++;}
    cout<<"Liczb super B pierwszych w tym przedziale jest: "<<c<<endl;
                             
    system("pause");
    return 0;
}

mam o to takie zadanie..

Umieść wszystkie liczby „super B pierwsze” odpowiednio z przedziałów 1. 2. i 3. w 3 różnych tabelach

moze ktos mi pomoc ..?
prosil bym o kod ale kazda pomoc sie przyda...

0

c=++c; ?! Natychmiast to skasuj! Absolutnie nie wolno tak robić! tak samo jak ++i++ i tym podobne!
Zamiast tego wystarczy przeciez samo

 c++ 

Ale w czym problem? Skoro masz już funkcje która sprawdza czy liczba jest liczbą super B pierwszą?
Lecisz pętlą for po przedziale i zamiast tej inkrementacji licznika "c" wpisujesz liczbę do tablicy, czyli :

int tab[X];
int j=0;
  for (int i=poczotekprzedzialu; i<=koniecprzedzialu; i++)
    if( pierwsze(i) && pierwsze(sumaCyfr(i)) && pierwsze(decToSumaBin(i)))
      {
         cout<<i<<endl;
         c++;
         tab[j++]=i;
      }
//I tu w tablicy tab[] masz swoje liczby
0

Liczba „super pierwsza”, to taka liczba naturalna, która spełnia następujące warunki:

• jest liczbą pierwszą

• suma cyfr tej liczby 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ą.

Dla każdego z podanych przedziałów oblicz, ile jest liczb "super pierwszych" i „super B pierwszych”w tym przedziale.

Wejście:

Liczby całkowite a i b gdzie 0<a<b<=1000000 wyznaczające granice przedziałów <a,b> poszukiwań, każda para w nowej lini.

Wyjście:

Dla każdego przedziału w oddzielnych liniach para liczb oddzielona spacja suma liczb "super pierwszych" i suma liczb "super B pierwszych".

JEŚLI MACIE JAKIEŚ POMYSŁY TO Z GÓRY DZIĘKUJĘ ;)

0

0_o? Ale przecież to wszystko masz powyżej...

0

Jest, ale żle ;/

0

A co to? Zadanie od Pani Kapelańczyk z 2LO w Kołobrzegu? ^^

0

Jest to zadanie ze strony main.edu.pl, które wcale nie jest trudne. W treści zadania masz podane wszystko co jest Ci potrzebne i po prostu przerzuć to do kodu. Tutaj nie ma algorytmów specjalnych. Trzeba to zrobić metodą brute.

Daj znać jak zatniesz się w jakiejś części kodu, bo nie licz na to, że dostaniesz gotową odpowiedź :)

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