【C系列4.3】函数训练之素数判断(预处理篇) 1971
Time Limit: 1 s Memory Limit: 32 MB
Submission:473 AC:86 Score:21.74
Description
cyn小朋友昨天刚学了素数的判断,结果今天他就忘了,你能帮他完成老师给他布置的素数判断作业吗?(主函数代码部分已经固定,请按需写函数部分,如果提交的不是c语言则需要写全部代码)
#include<stdio.h>
#include<string.h>
#include<math.h>
int isPrime[1000011];
void getprime();
int main()
{
int t;
scanf("%d",&t);
getprime();
while(t--)
{
int n;
scanf("%d",&n);
if(isPrime[n])
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
Input
第一行输入一个T,表示有T组数据。
接下来T行,每行只有一个整数n(1 <= n <= 1000000),代表你需要验证的整数。
Output
对于每一个n,若是素数就输出“YES”,否则输出“NO”
Samples
input:
4
1
2
3
4
output:
NO
YES
YES
NO
Hint
大数据请用scanf与printf读入和输出。本题目涉及全局变量和数组的知识,可以先预习数组章节再完成本题。
下附AC代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAXV 1000011
int isPrime[MAXV + 1];
int prime[MAXV + 1];
int size=0;
void getprime();
int main()
{
int t;
scanf("%d",&t);
getprime();
while(t--)
{
int n;
scanf("%d",&n);
if(isPrime[n])
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
void getprime() {
int i, j, k, n;
isPrime[1] = 0;
for (i = 2; i <= 1000000; i++) {
k = sqrt(i);
for (j = 2; j <= k; j++) {
if (0 == i % j)
break;
}
if (j > k)
isPrime[i] = 1;
else
isPrime[i] = 0;
}
}