给出了含范围的埃拉托斯烯的筛 我试图在C++中从N到NSMAX生成素数序列。我的方法是使用Eratosthenes筛来生成这些素数: void runEratosthenesSieve(int upperBound) { int upperBoundSquareRoot = (int)sqrt((double)upperBound); bool *isComposite = new bool[upperBound + 1]; memset(isComposite, 0, sizeof(bool) * (upperBound + 1)); for (int m = 2; m <= upperBoundSquareRoot; m++) { if (!isComposite[m]) { cout << m << " "; for (int k = m * m; k <= upperBound; k += m) isComposite[k] = true; } } for (int m = upperBoundSquareRoot; m <= upperBound; m++) if (!isComposite[m]) cout << m << " "; delete [] isComposite; } void runeratosthenessive(int上限){ int upperBoundSquareRoot=(int)sqrt((双)上界); bool*isComposite=新bool[上限+1]; memset(isComposite,0,sizeof(bool)*(上限+1)); 对于(int m=2;m

给出了含范围的埃拉托斯烯的筛 我试图在C++中从N到NSMAX生成素数序列。我的方法是使用Eratosthenes筛来生成这些素数: void runEratosthenesSieve(int upperBound) { int upperBoundSquareRoot = (int)sqrt((double)upperBound); bool *isComposite = new bool[upperBound + 1]; memset(isComposite, 0, sizeof(bool) * (upperBound + 1)); for (int m = 2; m <= upperBoundSquareRoot; m++) { if (!isComposite[m]) { cout << m << " "; for (int k = m * m; k <= upperBound; k += m) isComposite[k] = true; } } for (int m = upperBoundSquareRoot; m <= upperBound; m++) if (!isComposite[m]) cout << m << " "; delete [] isComposite; } void runeratosthenessive(int上限){ int upperBoundSquareRoot=(int)sqrt((双)上界); bool*isComposite=新bool[上限+1]; memset(isComposite,0,sizeof(bool)*(上限+1)); 对于(int m=2;m,c++,primes,sieve-of-eratosthenes,C++,Primes,Sieve Of Eratosthenes,您需要做的就是确定小于等于sqrt(N_max)的值是素数还是复合值,就像您已经做的那样。然后从N到N_max循环,确定每个值是否可以被找到的素数整除(介于2和sqrt(N_max)) 这只是对你的方法的一个小小的调整 旁白:不是使用浮点计算平方根(即sqrt()),而是使用简单的算法计算“整数平方根”(也就是说,给定一个值M,找到最大的整数R,这样你可能会喜欢我的回答,它只生成给定范围内的素数。在phyton中,我将尝试翻译,但谢谢你!它实际上不是Python,而是一种伪代码。

您需要做的就是确定小于等于
sqrt(N_max)
的值是素数还是复合值,就像您已经做的那样。然后从N到N_max循环,确定每个值是否可以被找到的素数整除(介于
2
sqrt(N_max)

这只是对你的方法的一个小小的调整


旁白:不是使用浮点计算平方根(即
sqrt()
),而是使用简单的算法计算“整数平方根”(也就是说,给定一个值
M
,找到最大的整数
R
,这样你可能会喜欢我的回答,它只生成给定范围内的素数。在phyton中,我将尝试翻译,但谢谢你!它实际上不是Python,而是一种伪代码。