zerojudge a626. 6. Prime Directive

題目在 https://zerojudge.tw/ShowProblem?problemid=a626

這題是要印出小於或等於n以內的所有質數. 求質數的方法可以參考我的另一篇 zerojudge b513. 判斷質數-商競103. 這題各位可能會錯在題目沒說測資中會有好幾個N,輸入為EOF代表測資結束,不同的N的答案要用’\n’分開. 這些都注意到,就會AC了.

程式跟上面提到的另一篇差不多, 我就不再解釋了. 完整程式如下.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

//V儲存所有的質數
vector <int> V;

//測試v是否為質數, 如果是就放入V中
void getNextPrime(int v){
	int max=sqrt(v);
	for(int i : V){
		if(i>max)  break;
		if(v%i==0)
			return;
	}
	V.push_back(v);
}


int main(){

        //求出小於等於1000的所有質數
	int n=1000;

	V.push_back(2);
	V.push_back(3);
	int index=6;
	while(index-1<=n){
		getNextPrime(index-1);
		if(index+1<=n){
			getNextPrime(index+1);
		}
		index+=6;
	}

    //依測資要求印出所有質數
	while(scanf("%d",&n)!=EOF)
    {
		int count=0;
		for(int i : V){
			if(i>n)
                            break;
			printf("%10d",i);
			//每印五個數要換行
			count++;
			if(count%5==0)
				printf("\n");
		}
		//換印下一題前要先換行, 如果已經印過\n就不再換行
		if(count%5)
			printf("\n");
	}
}
C++