1971-判斷素數

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

原題鏈接:http://acm.hznu.edu.cn/OJ/problem.php?cid=1092&pid=4

發佈了53 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章