参考博客https://www.cnblogs.com/dongsheng/archive/2012/08/18/2645594.html
数m,s(m)都不等于n,则称n为不可摸数.
2
5
8
yes
no
#include<iostream>
#include<cstring>
using namespace std;
//这里MAXN开差不多1005过不了
#define MAXN 500010
int flag[1005],sum[MAXN];
//打表
void init()
{
memset(flag,0,sizeof(flag));
memset(sum,0,sizeof(sum));
/*手动模拟一下就行
i=1;
sum[2]=1,sum[3]=1,sum[4]=1...
i=2;
sum[4]=1+2,sum[6]=1+2,sum[8]=1+2...
因为此题因子不包含自身
从第j=i*2算起,递增i,每个j都包含因子i
*/
int i,j;
for(i=1;i<=MAXN/2;++i)
for(j=i*2;j<MAXN;j+=i)
sum[j]+=i;
for(i=1;i<MAXN;++i)
if(sum[i]<1002)
flag[sum[i]]=1;
}
int main()
{
init();
int T;
while(cin>>T)
{
while(T--)
{
int n;
cin>>n;
if(flag[n])
cout<<"no"<<endl;
else
cout<<"yes"<<endl;
}
}
return 0;
}