前两天在网上看到一种判断素数的方法(筛选法),跟平时老师讲的不太一样,于是亲手尝试了一下,果然,计算速度有很大差别!(前提是运算的数据很多,本文以1000000以内的素数为例!)
#include <iostream>
#include<fstream>
#include<ctime>
using namespace std;
#define MAX_NUM 1000000
int IsPrime[MAX_NUM + 10];
int main() {
int a = 0;
int i, j;
clock_t start_time,end_time;//计算程序运行时间
start_time = clock();
for (i = 2;i<=MAX_NUM;i++) {
IsPrime[i] = 1;//将1000000个数据在数组内的值赋成1
}
for (i = 2;i <= MAX_NUM;i++) {
for (j = 2;j <= (int)sqrt(i);j++) {
if (i%j == 0) {
IsPrime[i] = 0;
continue;
}
}
}
end_time = clock();
ofstream file;
file.open("sushu.txt");
file <<"素数输出:"<< endl;
for (i = 2;i <= MAX_NUM;i++) {
if (IsPrime[i] == 1)
{
file << i << " ";a++;//输出数组内值为一对应的i值,即为素数,a用于记录素数个数
}
}
file << endl;
file << "----------------------------------" << endl;
file << "1000000以内的质数共有" << a << "个!" << endl;
file << "----------------------------------" << endl;
file.close();
cout << "此算法运行时间为:" << end_time - start_time << "ms" << endl;
cout << "结果已写入文件!" << endl;
return 0;
}
#include <iostream>
#include<fstream>
#include<ctime>
using namespace std;
#define MAX_NUM 1000000
int IsPrime[MAX_NUM + 10];
int main() {
int a = 0;
int i, j;
clock_t start_time,end_time;//计算程序运行时间
start_time = clock();
for (i = 2;i<=MAX_NUM;i++) {
IsPrime[i] = 1;//将1000000个数据在数组内的值赋成1
}
for (i = 2;i<=MAX_NUM;i++) {
if (IsPrime[i]==1) {
for (j = 2 * i;j <= MAX_NUM;j += i) {
IsPrime[j] = 0;//从2开始,依次找出其倍数并将数组值置零
}
}
}
end_time = clock();
ofstream file;
file.open("sushu.txt",ios::out||ios::app);
file <<"素数输出:"<< endl;
for (i = 2;i <= MAX_NUM;i++) {
if (IsPrime[i] == 1)
{
file << i << " ";a++;//输出数组内值为一对应的i值,即为素数,a用于记录素数个数
}
}
file << endl;
file << "----------------------------------" << endl;
file << "1000000以内的质数共有" << a << "个!" << endl;
file << "----------------------------------" << endl;
file.close();
cout << "此算法运行时间为:" << end_time - start_time << "ms" << endl;
cout << "结果已写入文件!" << endl;
return 0;
}
原文:https://www.cnblogs.com/eternal-pig/p/C_one.html