Description
我们下面来研究整数性质,我们知道质数只有1和自身两个因子,合数至少有除了1和自身的其他因子,我们也知道“猫老大数”是只能分解成两个质数乘积形式的数,那么能分解成两个合数的数呢?我们称之为“牛数”。下面编程判断整数是否为“牛数”。
Input
第一行为t(1≤t≤100),表示测试数据组数。
接下来t行,每行一个正整数x。
Output
对于每个输入数据x,判断它是否为“牛数”,并输出一行字符串:如果它是“牛数”,输出“cow”,否则输出“no”。
Sample Input
21536
Sample Output
nocow
HINT
60%的数据:1≤x≤109
100%的数据:1≤x≤1012
#include<stdio.h>
long long cow,flag;
int n,p[100001],cnt,idx;
int isprime[1000001];
void prime()
{
for(int i=2;i<1000000;i++)
{
if(!isprime[i])
p[cnt++]=i;
for(int j=0;j<cnt&&p[j]*i<1000000;j++)
{
isprime[i*p[j]]=1;
if(i%p[j]==0)
break;
}
}
}
int main()
{
scanf("%d",&n);
prime();
for(int j=1;j<=n;j++)
{
flag=0;
scanf("%lld",&cow);
idx=0;
for(int i=0;(long long)p[i]*p[i]<=cow;i++)
{
while(cow%p[i]==0)
{
if(idx>=3)
break;
idx++;
cow/=p[i];
}
if(idx==3&&cow!=1)
{
printf("cow\n");
flag=1;
break;
}
if(cow==1&&cow<4)
{
printf("no\n");
flag=1;
break;
}
}
if(flag==0)
printf("no\n");
}
}