1007 素数对猜想 (20分).cpp

很明显的素数除了2,都是奇数,这么说求素数对,不可能是两对偶数了,2跟3的差值又不是题目所要求的2,那么这样的话,可以直接从3开始求答案,只需要i不断的加2,并且注意条件,i+2《M,这里即保证了差值为2,再来判断是否是素数,素数仍然用初始化方法!

#include<iostream>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
bool test[105000];
int N = 105000;
int num;
int P[105000];
//有点像dp一次全部找到!
void isPrime() {
	int i = 2;
	for(; i <= N; i++) {
		if(test[i]==false) {//注意两个《 不要漏了
			P[num++] = i;
			for(int j = i + i; j <= N; j+=i) {
				test[j] = true;
			}
		}
	}
}


int main() {
	int M,n;
	scanf("%d",&M);
	memset(test,0,sizeof(test));
	memset(P,0,sizeof(P));
	num = 0;
	isPrime();
	int cnt = 0;
	for(int i = 3; i + 2 <= M; i+=2) {
		if(!test[i]&&!test[i+2])
			cnt++;
	}
	printf("%d",cnt);

	return 0;
}
发布了78 篇原创文章 · 获赞 3 · 访问量 6574

猜你喜欢

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