输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于1000000 的需要判断的正整数 输出格式: 对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No
时间: 2023-05-24 08:01:14 浏览: 287
以下是C知道的回答:
可以使用素数筛法来实现该问题。首先,我们需要定义一个数组prime,标记是否为素数。假设最大的需要判断的正整数为max,那么我们可以设置prime[max+1]数组,并初始化为1,表示都是素数。然后,我们从2开始遍历到max,如果prime[i]为1,说明当前i是素数,那么我们就把i的倍数(除以自己)都标记为非素数,即prime[j]=0(j为i的倍数)。最后,我们遍历输入给出的N个正整数,如果该正整数小于等于1,则输出No。如果该正整数在prime数组中对应的位置为1,说明它是素数,输出Yes,否则输出No。
下面是代码实现:
```
#include <stdio.h>
#include <math.h>
#define MAX 1000000
int prime[MAX+1];
void initPrime()
{
int i,j;
for(i=2; i<=MAX; i++)
prime[i] = 1;
for(i=2; i<=sqrt(MAX); i++)
{
if(prime[i])
{
for(j=i*i; j<=MAX; j+=i)
prime[j] = 0;
}
}
}
int main()
{
int n, num;
scanf("%d", &n);
initPrime();
while(n--)
{
scanf("%d", &num);
if(num<=1 || !prime[num])
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
```
阅读全文