Uva 10235 - Simply Emirp

/*

    Uva 10235 - Simply Emirp
    Verdict: Accepted
    Time:: 0.449 !!!!!!!!
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <list>
#include <vector>
#define N 1000000
using namespace std;

long stats[(N/2)+1];

long pri[(N/2)+1],pril=1;

void prime ()
{
    long i,j,qrt;

    qrt = long (sqrt(double (N)));

    for (i=2;i<=N>>1;i++)
    {
        stats[i] = 0;
    }

    pri[0] = 2;

    for (i=3;i<=qrt;i+=2)
    {
        if (stats[i>>1] == 0)
        {
            for (j=i*i;j<=N;j+=i+i)
            {
                stats[j>>1] = 1;
            }
        }
    }

    for (i=3;i<=N;i+=2)
    {
        if (stats[i>>1] == 0)
        {
            //printf("%ld ",i);
            //vprime.push_back(i);
            pri[pril] = i;
            pril++;
        }
    }
}

int main()
{
    prime();

    /*for (long i=0;i<pril;i++)
    {
        //cout << vprime[i];
        printf("%ld ",pri[i]);
    }*/

    long n,a,b,narr[(N/2)+1],nlen,i,j,r;

    while (scanf ("%ld",&n)==1)
    {
        r=0,nlen=0;
        bool f = false;

        for (i=0;i<pril;i++)
        {
            if (n == pri[i])
            {
                f = true;
                break;
            }
        }

        if (!f)
        {
            printf("%ld is not prime.\n",n);
        }

        else {

        bool jst = false;
        a = n;
        b = n;

        while (a!=0)
        {
            a%=10;
            narr[nlen] = a;
            nlen++;

            b/=10;

            a = b;
        }

        /*for (i=0;i<nlen;i++)
        {
            printf("%ld ",narr[i]);
        }*/

        for (i=0;i<nlen;i++)
        {
            r = (r*10) + narr[i];
        }

        //printf("%ld\n",r);

       for (i=0;i<pril;i++)
       {
           if (r == pri[i])
           {
               jst = true;
               break;
           }
       }

        if (jst)
        {
            if (r == n)
            {
                printf("%ld is prime.\n",n);
            }

            else
            {
                printf("%ld is emirp.\n",n);
            }
        }

        else
        {
            printf("%ld is prime.\n",n);
        }

    }
}

    return 0;
}

Comments

Popular posts from this blog

Uva 10650 - Determinate Prime

SPOJ-CMG - Collecting Mango

LeetCode Palindrome Number