第五届图灵杯 A 逃出生天

第五届“图灵杯”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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/m0_51344983/article/details/112794979