Simply Emirp

題目連結 UVA 10235

中文簡述

一個比 1 大的整數如果只有 1 和他本身自己共 2 個因數,我們稱這個數為質數(prime number)。多年來質數一直被數學家們研究著。質數也常被應用在密碼學和編碼理論中。

那麼你曾經把質數倒轉過來嗎?對大部分的質數來說,你將會得到一個組合數(例如:43 變成 34)現在,我們要定義 Emirp(就是把 Prime 反過來拼):如果你把一個質數反過來之後,他仍然是一個質數,並且和原來那個質數不同,那我們就稱這個數為 emirp number。例如:17 是一個emirp,因為 17 和 71 都是質數。在這個問題中,你必須要決定某一個整數 N 是非質數,質數,或 emirp。你可以假設 1<N<1000000。

對每一輸入 N,輸出以下的訊息:

  1. "N is not prime.",如果 N 不是一個質數

  2. "N is prime.",如果 N 是一個質數,但是不是一個 Emirp

  3. "N is emirp.",如果 N 是一個 emirp

solution:


#include<bits/stdc++.h>
using namespace std;
int getprime(int n)
{
	int check=1,i=2;
//	n=pow(n,0.5)+1;
//	cout<<n<<endl;
	for(i=2;i<n and check ;i++)
	{
		if(n%i==0)
		{
			check=0;
		}
		else
		{
			check=1;
		} 
//		cout<<check<<" "<<i<<endl;
	}
	return check;
}

int flip(int cn1)
{
	int cn2=0;
	while(cn1>0)//蝧餉??詨? 
	{
		cn2=cn2*10+cn1%10;
		cn1=cn1/10;
	}
	return cn2;
}

int main()
{
	int  n;
	while(cin>>n)
	{
 		int prime=getprime(n);
		int emirp;
		if(n==flip(n))
		{
			emirp=0;
		}
		else
		{
			emirp=getprime(flip(n));
		}
//		cout<<n<<" "<<prime<<" "<<flip(n)<<" "<<emirp<<endl;
		if(prime and emirp)
		{
			cout<<n<<" is emirp."<<endl;
		}
		else if (prime and !emirp)
		{
			cout<<n<<" is prime."<<endl;
		}
		else if(!prime)
		{
			cout<<n<<" is not prime."<<endl;
		}
		
	}
}

tags: UVA

回目錄 學習筆記