# UVA 10235 Simply Emirp
## 題目連結 [UVA 10235](https://vjudge.net/problem/UVA-10235)
### 題目內容
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 umbers 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 consists of several lines specifying values for N.
### 輸出限制
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.
### 解題思路
1.先建大小為1000005的質數表
2.先把數字當字串讀取,利用==stoi==轉換為整數型別
3.先判斷是否為質數,若是就翻轉確認是否為質數,需要注意的是若翻轉後與翻轉前相同就視為prime,若翻轉後仍是質數,則是emirp
### 程式碼
```cpp=
#include<bits/stdc++.h>
using namespace std;
int prime[1000005];
void Prime(){
for(int i=0;i<1000005;i++){
prime[i]=1;
}
prime[0]=0;
prime[1]=0;
for(int i=0;i<1000005;i++){
if(prime[i]==1){
for(int j=i+i;j<1000005;j+=i){
prime[j]=0;
}
}
}
}
int main(){
Prime();
string n;
while(cin>>n){
long long a=stoi(n);
if(prime[a]==0){
cout<<n<<" is not prime."<<endl;
}
else{
string s=n;
reverse(s.begin(),s.end());
if(s==n){
cout<<a<<" is prime."<<endl;
continue;
}
long long b=stoi(s);
if(prime[b]==0){
cout<<a<<" is prime."<<endl;
}
else{
cout<<a<<" is emirp."<<endl;
}
}
}
}
```
## 測資
### 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.
## 中文題目連結 [zerojudge d387](https://zerojudge.tw/ShowProblem?problemid=d387)