第五届“图灵杯”NEUQ-ACM程序设计大赛
A逃出生天
题目描述:
gold学长从昏迷中醒来以后发现自己被困在一个山洞里,他找了很久,终于找到一个门。门上写着:想要逃出去,只有一个办法 你可以选择一个数n,设m=1 * 2 * … * (n-1)。如果m是n的倍数,那么门就会自动打开,否则你就别想出去了。 gold学长内心充满了绝望,他想了一些数,但他不知道这些数能不能保证自己逃出去。你能帮助gold学长逃出生天吗?
输入:
第一行一个数T(T<=1000),表示gold学长想的数的个数 接下来每一行一个数n(2<=n<=1e8),表示gold学长想的数
输出:
每行一个输出 对于每一个数,如果学长能逃出去,则输出“escape”(不含引号),否则输出“trapped”(不含引号)
样例输入
4
5
6
7
8
样例输出
trapped
escape
trapped
escape
思路
其实就是对n进行素数的判断,其中4需要特判。
我一开始没考虑到4需要特判,提交总是卡着一个点过不了,我以为是判断素数超时了,还特地去查了其他的判断素数的方法,但是没必要,普通的判别就可以了。
bool isPrime( int num )
{
//两个较小数另外处理
if(num ==2|| num==3 )
return 1 ;
//不在6的倍数两侧的一定不是质数
if(num %6!= 1&&num %6!= 5)
return 0 ;
int tmp =sqrt( num);
//在6的倍数两侧的也可能不是质数
for(int i= 5;i <=tmp; i+=6 )
if(num %i== 0||num %(i+ 2)==0 )
return 0 ;
//排除所有,剩余的是质数
return 1 ;
}
代码
#include<bits/stdc++.h>
using namespace std;
bool isPrime( int num )//判断素数
{
int tmp =sqrt( num);
for(int i= 2;i <=tmp; i++)
if(num %i== 0)
return 0 ;
return 1 ;
}
int main(){
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
if(n==4)cout<<"trapped"<<endl;
else{
if(isPrime(n)==1)cout<<"trapped"<<endl;
else cout<<"escape"<<endl;
}
}
}