题解 | 素数对

素数对

https://www.nowcoder.com/practice/9aaa288943e7498a9626d4f4f12ced4c

#include<bits/stdc++.h>
using namespace std;

const int N=5e5+10;

int n;

map<int,bool> mp;
vector<int> v;
bool f[N];

int main(){
	
	for(int i=2;i<N;i++){
		if(!f[i]){
			mp[i]=true;
			v.push_back(i);
			for(int j=i*2;j<N;j+=i){
				f[j]=true;
			}
		}
	}
	cin>>n;
	int cnt=0;
	bool f_two=false;
	for(int i=0;i<v.size()&&v[i]<=n;i++){
		if(v[i]*v[i]-2>n) break;
		if(mp[v[i]*v[i]-2]==true){
//			cout<<v[i]<<endl;
			if(v[i]==2&&!f_two){
				cnt++;
				f_two=true;
			}
			else cnt+=2;
		}
	}
	
	cout<<cnt<<endl;

    return 0;
}


全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务