【发布时间】:2011-10-21 09:26:47
【问题描述】:
请查看以下内容,看看您是否可以提供建议。
cout << "2" << endl;
cout << "3" << endl;
ofstream of("Primes.txt");
unsigned long prime = 0;
unsigned long i = 1;
for (i = 1; i < 100000; i++)
{
prime = ((i*2)+(i+1) + (i % 2));
of << prime << endl;
}
of.close();
return 0;
计算第n个素数的部分完成公式
第n个质数被吐出,但它的所有质因数也被吐出
如何筛选列表并仅找到素数。
5
7
11
13
17
19
23
25
29
31
35
37
41
43
47
49
53
55
59
61
65
67
71
73
77
79
83
85
89
91
95
97
101
103
好的,我稍微改变了一些方法 - 我将尝试实施 今晚过筛——我现在要去写信息学测试,但是 这是我对一些素数的新实现。
vector<int> Primes;
bool IsPrime(int q)
{
for(unsigned int i = 0; i < Primes.size(); i++)
{
if(q % Primes[i] == 0)
return false;
}
return true;
}
int main()
{
Primes.push_back(2);
cout << "2" << " is prime" << endl;
for (unsigned int i = 2; i < 1000000000; i++)
{
if(IsPrime(i))
{
Primes.push_back(i);
cout << i << " is prime" << endl;
}
}
}
好的,这确实给出了质数,但确实使用了很多内存。 随着向量变长,随着时间的推移变慢。
【问题讨论】:
-
请发布一个完整的程序以及预期和实际输出的示例。见sscce.org。
-
您的算法只输出所有等于 +/-1 mod 6 的数字。这与素数无关。
-
@TonyK:它消除了 2 和 3 的倍数,这意味着您可以使用较小的筛选器来找到其他素数。
-
@Mike:我们也知道大多数素数都是奇数。这个程序与打印所有奇数的程序一样有用。