Problem Description
source:https://uva.onlinejudge.org/external/102/10235.html
An integer greater than 1 is called a prime number if its only positive divisors (factors) are 1 and itself. Prime numbers have been studied over the years by a lot of mathematicians. Applications of prime numbers arise in Cryptography and Coding Theory among others.
Have you tried reversing a prime? For most primes, you get a composite (43 becomes 34). An Emirp (Prime spelt backwards) is a Prime that gives you a different Prime when its digits are reversed. For example, 17 is Emirp because 17 as well as 71 are Prime.
In this problem, you have to decide whether a number N is Non-prime or Prime or Emirp. Assume that 1 < N < 1000000.
Interestingly, Emirps are not new to NTU students. We have been boarding 199 and 179 buses for quite a long time!
Input
Input consists of several lines specifying values for N.
Output
For each N given in the input, output should contain one of the following:
1. ‘N is not prime.’, if N is not a Prime number.
2. ‘N is prime.’, if N is Prime and N is not Emirp.
3. ‘N is emirp.’, if N is Emirp.
Sample Input
17
18
19
179
199
Sample Output
17 is emirp. 18 is not prime.
19 is prime.
179 is emirp.
199 is emirp.
Solution:
source:https://uva.onlinejudge.org/external/102/10235.html
An integer greater than 1 is called a prime number if its only positive divisors (factors) are 1 and itself. Prime numbers have been studied over the years by a lot of mathematicians. Applications of prime numbers arise in Cryptography and Coding Theory among others.
Have you tried reversing a prime? For most primes, you get a composite (43 becomes 34). An Emirp (Prime spelt backwards) is a Prime that gives you a different Prime when its digits are reversed. For example, 17 is Emirp because 17 as well as 71 are Prime.
In this problem, you have to decide whether a number N is Non-prime or Prime or Emirp. Assume that 1 < N < 1000000.
Interestingly, Emirps are not new to NTU students. We have been boarding 199 and 179 buses for quite a long time!
Input
Input consists of several lines specifying values for N.
Output
For each N given in the input, output should contain one of the following:
1. ‘N is not prime.’, if N is not a Prime number.
2. ‘N is prime.’, if N is Prime and N is not Emirp.
3. ‘N is emirp.’, if N is Emirp.
Sample Input
17
18
19
179
199
Sample Output
17 is emirp. 18 is not prime.
19 is prime.
179 is emirp.
199 is emirp.
Solution:
#include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <deque> #include <fstream> #include <iostream> #include <list> #include <map> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #include<stdio.h> #include<stdlib.h> #define max 1000002 using namespace std; void GenPrime(); long int Reverse(long int p); long int prime[max]; int main() { GenPrime(); long int n,rev,tem; while(scanf("%ld",&n)==1) { rev=Reverse(n); if(prime[n] && prime[rev]&& n>9 && rev!=n) printf("%ld is emirp.\n",n); else if(prime[n]) printf("%ld is prime.\n",n); else printf("%ld is not prime.\n",n); } return 0; } void GenPrime() { long int i,j,m; m=(long int)sqrt(max); memset(prime, 1, sizeof(prime)); prime[0]=prime[1]=0; for(i=2;i<=m;i++) { if(prime[i]) for(j=i+i;j<max;j+=i) prime[j]=0; } } long int Reverse(long int p) { long int r; r=0; while(p!=0) { r=(r*10)+(p%10); p=p/10; } return r; }
No comments:
Post a Comment
Write your comment - Share Knowledge and Experience