您的位置:首页 > 编程语言 > C语言/C++

C++求素数

2015-05-21 12:10 176 查看
#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>
using namespace std;
//统计小于n的素数个数
int prime(int n) {
//记录某数是否访问
bool *v = new bool
;
//保存素数
int *p = new int
;
int i, j, res = 2;
if (n < 3) return 0;
if (n == 3) return 1;
if (n == 4 || n == 5) return 2;
for (i = 0; i < n; i++)
v[i] = false;
for (i = 1;; i++) {
//只需判断6n-1和6n+1
if (6 * i - 1 >= n)
break;
if (v[6 * i - 1] == false)
p[res++] = 6 * i - 1;
for (j = 2; j < res && (6 * i - 1) * p[j] < n; j++) {
v[(6 * i - 1) * p[j]] = true;
if ((6 * i - 1) % p[j] == 0)
break;
}
if (6 * i + 1 >= n)
break;
if (v[6 * i + 1] == false)
p[res++] = 6 * i + 1;
for (j = 2; j < res && (6 * i + 1) * p[j] < n; j++) {
v[(6 * i + 1) * p[j]] = true;
if ((6 * i + 1) % p[j] == 0)
break;
}
}
delete []v;
delete []p;
return res;
}

int main() {
//计算运行时间
clock_t s, e;
s = clock();
int n = prime(9973);
e = clock();
cout << n << "  " << 1.0 * (e - s) / CLOCKS_PER_SEC << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 素数