【发布时间】:2016-01-07 10:51:34
【问题描述】:
我在下面写了一段代码,它要求用户输入并检查它是否是素数。我现在想以此为基础,所以当用户输入一个数字时,我会计算到这个数字的素数并显示。例如,如果用户输入 10,我的程序将输出“有 4 个素数”。我的想法是我必须将每个素数存储到一个向量中,但我的问题是如何?
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
vector <double> primeHolder
int x, i, flag;
cout << "Enter a positive integer ";
cin >> x;
for (i = 2; i <= x/2; i++)
{
if(x%i == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
cout << "This is a prime number";
else
cout << "This is not a prime number";
return 0;
}
【问题讨论】:
-
使用循环和
push_back(x)? -
首先,
x/2有点过分(使用i <= sqrt(x))。其次,eratosthene's sieve 效率更高(特别是如果在布尔掩码中,您每比特只保存奇数,当您增加*尺寸时甚至更多)。第三,push_back() 是你需要的。 -
使用费马素数检验,
1 / (2^100)可能会出错,您可以更快地完成:en.wikipedia.org/wiki/Fermat_primality_test