PATbasic1007

来源:互联网 发布:量化投资python教材 编辑:程序博客网 时间:2024/05/16 07:52
#include "stdafx.h"#include<iostream>#include<vector>using namespace std;vector<int> Prime(int n) {              //筛法判断质数vector<int> prime;bool *isprimes = new bool[n + 1];int i, j, k;for (i = 2; i <= n; ++i) {isprimes[i] = true;}for (i = 2; i <= n; ++i) {if (isprimes[i] == true) {for (j = 2; i*j <= n; ++j) {isprimes[i*j] = false;}}}for (k = 2; k <= n; ++k) {if (isprimes[k]) prime.push_back(k);}return prime;}int main(){int n, i, count = 0;cin >> n;vector<int> prime = Prime(n);/*for (i = 0; i < prime.size(); i++) {cout << prime[i] << " ";}cout << endl;*/int current = 0;for (i = 1; i < prime.size(); i++) {if (prime[i] - prime[current] == 2) {current = i;count++;}else current++;}cout << count << endl;    return 0;}
这道题关键是判断质数那里,我用的筛法,其基本思想为:用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是质数,首先把它筛掉。
剩下的数中选择最小的数是质数,然后去掉它的倍数。依次类推,直到筛子为空时结束(百度百科)。如果用最常见的试除法,复杂度为O(n^2),肯定超时。
原创粉丝点击