【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;
}
}