阶乘之和

Description

给出⼀个自然数,求这个数是否能够表示成⼏个不同的正整数的阶乘之和。

Format

Input

有多组数据。

第⼀⾏⼀个正整数 T,表示共有 T 组数据。

接下来 T ⾏,每⾏⼀个自然数 N。

Output

输出 T ⾏。

如果该数可以被表示为⼏个不同的正整数的阶乘之和,输出“TAK”(不含引号)。

否则,输出“NIE”(同样不含引号)。

Samples

输入数据 1

10
3
27
2
33
75
9
28
33
31
1

Copy

输出数据 1

TAK
TAK
TAK
TAK
NIE
TAK
NIE
TAK
TAK
TAK

Copy

输入数据 2

2
4
0

Copy

输出数据 2

NIE
NIE

Copy

Limitation

【数据规模与约定】

对于 20% 的数据,有 1 ≤ T ≤ 10,自然数最⼤不超过 100

对于 40% 的数据,有 1 ≤ T ≤ 100,自然数最⼤不超过 1000

对于 60% 的数据,有 1 ≤ T ≤ 1000,自然数最⼤不超过 1000000

对于 100% 的数据,有 1 ≤ T ≤ 100000,所有自然数在 long long 范围内

#include<bits/stdc++.h>
using namespace std;
long long f[1001],dd=1,t,n=0,m,g;
int main(){
    ios::sync_with_stdio (false); 
    dd=1;
    for(int i=1;dd<=1e18;i++){
        dd*=i;
        f[++n]=dd;
    }
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>m;
        g=m;
        for(int j=n;j>=1;j--){
            if(g>=f[j]){
                g-=f[j];
            }
        }
        if(g==0&&m!=0){
            cout<<"TAK\n";
        }
        else{
            cout<<"NIE\n";
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值