作者: Turbo时间限制: 1S章节: 基本练习(数组)
问题描述 :
如果一个合数由两个质数相乘而得,那么我们就叫它是质数们的直接后代。现在,给你一系列自然数,判断它们是否是质数的直接后代。
输入说明 :
第一行一个正整数T,表示需要判断的自然数数量
接下来T行,每行一个要判断的自然数
1<=T<=20
2<=要判断的自然数<=105
输出说明 :
共T行,依次对于输入中给出的自然数,判断是否为质数的直接后代,是则输出Yes,否则输出No
输入范例 :
4
3
4
6
12
输出范例 :
No
Yes
Yes
No
代码:
#include<string.h>
#include<stdlib.h>
#include<math.h>
int isprime(int num)
{
int i;
if(num<2)
return 0;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0)
return 0;
}
return 1;
}
int main()
{
int n,i,num,j;
int *s;
scanf("%d",&n);
s=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d",&s[i]);
}
for(i=0;i<n;i++)
{
int flag=0;
for(j=2;j<=sqrt(s[i]);j++)
{
if(isprime(j)==1&&isprime(s[i]/j)==1&&s[i]%j==0)//s[i]%j==0不能少呀
{
flag=1;
break;
}
}
if(flag==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
在这里插入代码片