问题 A素数

关于素数,最好不要逐个求,直接用类dp的方法直接把100010以内的数先进行初始化,用test数组标记是否已经标记为非素数,这是极好极快的。本题要求筛选特定的结果。

#include<iostream>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
bool test[100010];
int N;
int num;
int P[100010];
//有点像dp一次全部找到!
void isPrime() {
	int i = 2;
	for(; i < N; i++) {
		if(test[i]==false) {
			if(i%10==1)
				P[num++] = i;
			for(int j = i + i; j < N; j+=i) {
				test[j] = true;
			}
		}
	}
}
//这个是每个进行检查!判断!
/*int twoPrime() {
	int flag = 1;
	for(int q = 2; q < N; q++) {
		for(int i = 2; i <= (int)sqrt(1.0*q); i++) {
			if(q % i == 0) {
				flag = 0;
			}
		}
		if(flag) {
			if(q%10==1)
				P[num++] = q;
		}
		flag = 1;
	}
*/

//
//	for(int i =2; i * i <= N; i++) {
//		if(N%i!=0) {
//			P[num++] = i;
//		}
//	}
	return 0;
}

int main() {
	while(~scanf("%d",&N)) {
		memset(test,0,sizeof(test));
		memset(P,0,sizeof(P));
		num = 0;
		twoPrime();
		for(int i = 0; i < num; i++) {
			if(i == num - 1)
				printf("%d\n",P[i]);
			else if(i != num - 1)
				printf("%d ",P[i]);
		}
		if(num == 0) printf("-1\n");
	}
	return 0;
}

发布了78 篇原创文章 · 获赞 3 · 访问量 6577

猜你喜欢

转载自blog.csdn.net/weixin_38023259/article/details/105027850