描述
素数又称质数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。这个题目要求你判断一个数字是否为质数,规定1
不是质数。
输入
多组测试样例,第一行输入一个整数T(1<= T <= 10000000)
,代表有T
组测试数据
接下来T
行,每行有一个数字x(1 <= x <= 10000000)
输出
输出T
行,如果这个数是素数输出Yes
,否则输出No
线性筛法:
(1)因为判断是否为素数,所以先将所有数据存入数组a[]中并假设均为素数,将其定义为1。最终若a[i]为1,证明是素数,输出yes,若a[i]为0,证明不是素数,输出no。
(2)1不是素数,则将a[1]赋值为0
扫描二维码关注公众号,回复:
8772604 查看本文章
(3)因为素数的倍数一定不为素数,则将素数的倍数的值从1变为0.
(4)循环从i=2开始,依次加1。使用if条件语句进行判断,如果i是素数,将其倍数变为0。
定义一个变量 j ,表示素数 i 的倍数,j初始的话就是i的2倍;因为j也要在数据的范围内,则j的终止条件是<=10000000;
if(a[i]==1)
{
for(j=2*i;j<=10000000;j+=i)
{
a[j]=0;
}
}
(5)多组输入输出样例来判断x是否为素数,只需多组输入x即可,判断素数要放在while(T--)前面
代码如下:
#include<stdio.h>
int a[10000005];
int main()
{
int T;
scanf("%d",&T);
int i,j;
a[1]=0;
for(i=2;i<=10000000;i++)
{
a[i]=1;
}
for(i=2;i<=10000000;i++)
{
if(a[i]==1)
{
for(j=2*i;j<=10000000;j+=i)
{
a[j]=0;
}
}
}
while(T--)
{
int x;
scanf("%d",&x);
if(a[x]==1)
{
printf("Yes\n");
}
else if(a[x]==0)
{
printf("No\n");
}
}
return 0;
}