Liczby kołowe
Kod był wyświetlany 1948 razy.
    /*
  Name: Liczby kołowe
  Copyright: GPL GMU
  Author: Przemysław Pastuszka
  Date: 25-04-10 23:26
  Description: 
  Program sprawdza czy w podanym przedziale są liczby pierwsze kołowe (circular 
  prime). Liczba pierwsza kołowa jest to liczba pierwsza o następującej własności:
           po przeniesieniu pierwszej cyfry tej liczby na jej koniec otrzymujemy 
           liczbę pierwszą – taką operację wykonujemy n-1 razy (n – liczba cyfr 
           naszej liczby) i za każdym razem otrzymujemy liczbę pierwszą.
Przykład: 1193 jest kołową liczbą pierwszą, ponieważ:
1193 – jest liczbą pierwszą
1931 – jest liczbą pierwszą
9311 – jest liczbą pierwszą
3119 – jest liczbą pierwszą
Inne liczby pierwsze kołowe: 1, 3, 7, 11, 13, 17, 37, 79, 113, 187, 199, 337, 1193, 
3779, 11939, 19937, 193939, 199933, ...
Zauważmy, że liczbą pierwsza kołowa może składać się wyłącznie z cyfr: 1, 3, 7, 9 
(wyjątek stanowią liczby jednocyfrowe 2, 5). 
*/

#include <conio.h>
#include <iostream>

using namespace std;
long Odwroc(long a)   //funkca zwracająca odwróconą liczbę
{
    long licznik=1,x=0,temp=0;
    long kopia=a;
    kopia/=10;
    while(kopia!=0)
    {
                   licznik*=10;
                   kopia/=10;
    }
    kopia=a;
    while(kopia!=0)
    {
              temp=kopia%10;
               x+=temp*licznik;
               kopia/=10;
               licznik/=10;
    }
    return x;
}
int main()
{
    int k;
    long p,a; //początek (p) i koniec przedzialu (a)
    
   cout<<"\n\n\t\tPodaj najmniejsza liczbe w przedziale >=2: ";
   cin>>p;
   cout<<"\n\n\t\tPodaj najwieksza liczbe w przedziale ";
    cin>>a;
    if((p<2)||(a<p))
   {
    cout<<"\n\n\t\tBledne dane"<<endl<<endl;
    system("pause");
   } 
    long max;           //wyznaczenie maksymalnego przedzialu dla tablicy
    if(a>Odwroc(a))
                   max=a;
    else
        max=Odwroc(a);
    max++;
    bool *tab=new bool[max];
    for(long i=2;i<max;i++) 
             tab[i]=true;
    for(long i=2;i<max;i++) //sito Erastotenesa
    {
             if(tab[i])
             {
                       for(long j=2*i;j<max;j+=i)
                                tab[j]=false;
             }
    }
    cout<<"\n\n\t\tLiczby cykliczne w przedziale <"<<p<<","<<a<<">:"<<endl<<endl;
    
    for(long i=p;i<=a;i++) //sprawdzenie kazdej z liczb w przedziale
            if(tab[i]&&tab[Odwroc(i)])
                              cout<<i<<"\t";
    getch();
    return 0;
}
    
Pobierz plik tekstowy
Załączniki
Administrator WJL
PHP&SQL coded by NOVA-IT