题目描述:
Jaanai最近知道了质数的定义是指有且只有两个因数的自然数。而Jaanai在写数学题的时候,她突然发现有很多自然数刚好拥有3个因数,她感到非常神奇,于是便把这种数命名为“Jaanai数”。但是现在她碰到一个难题,想让你帮她判断一个数是否为“Jaanai数”。
(提示:建议使用并修改质数筛函数)
输入格式:
一行输入n个正整数(可能出现1)。
输出格式:
n行,第i行代表第i个数是否为“Jaanai数”。如果是,输出“TQL!”;如果不是,输出“TCL!”。
样例输入:
4 9 16 25 36 49 64 81 100
样例输出:
TQL!
TQL!
TCL!
TQL!
TCL!
TQL!
TCL!
TCL!
TCL!
数据范围:
n <= 10000000
给出的每个正整数均小于等于4e8
#include<stdio.h>
#include<math.h>
# include<string.h>
/*质数的定义是指有且只有两个因数的自然数。
而Jaanai在写数学题的时候,她突然发现有很多自然数刚好拥有3个因数,
她感到非常神奇,于是便把这种数命名为“Jaanai数”。但
是现在她碰到一个难题,想让你帮她判断一个数是否为“Jaanai数”。
(提示:建议使用并修改质数筛函数)
输入格式:
一行输入n个正整数(可能出现1)。
输出格式:
n行,第i行代表第i个数是否为“Jaanai数”。
如果是,输出“TQL!”;如果不是,输出“TCL!”。
样例输入:
4 9 16 25 36 49 64 81 100
样例输出:
TQL!
TQL!
TCL!
TQL!
TCL!
TQL!
TCL!
TCL!
TCL!
数据范围:
n <= 10000000
给出的每个正整数均小于等于4e8
*/
#include<stdio.h>
#include<math.h>
int zhishu(int a)//判断质数 ,是返回1
{ int i;
if(a==1||a==0) return 0;
if(a==2||a==3) return 1;
for(i=2;i<=sqrt(a);i++)//由于数不是连续区间,用朴素算法
{
if(a%i==0)
return 0;
}
return 1;
}
int main()//显然,这样的数为平方数、质数
{
static int a[10001001]={0};
int b,c,i=0,j,o;
while(1) //输入
{
c=scanf("%d",&a[i]);//返回值判断是否结束
if(c==-1)
break;
i++;
}
for(j=0;j<i;j++)
{
o=sqrt(a[j]);//o存平方根时强制类型转换(去尾)
//这样o的平方仍为原始数,则为平方数
if(o*o==a[j]&&zhishu(o))//若为平方数、质数
printf("TQL!\n");
else
printf("TCL!\n");
}
}