此c ++代码输出以下素数: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97。
但是我不认为这是我的书希望这样写的方式。它提到一些关于数的平方根的事情。因此,我确实尝试将第二个循环更改为,for (int j=2; j<sqrt(i); j++)但没有给我所需的结果。
for (int j=2; j<sqrt(i); j++)
我需要如何将此代码更改为我的书所希望的样子?
int main () { for (int i=2; i<100; i++) for (int j=2; j<i; j++) { if (i % j == 0) break; else if (i == j+1) cout << i << " "; } return 0; }
质数是一个具有正好两个不同的除数的数,即1和数本身。编写,运行和测试C ++程序,该程序查找并打印所有小于100的质数。(提示:1是质数。对于2到100之间的每个数,请找到Remainder = Number%n,其中n的范围是2 \如果n大于sqrt(number),则该数字不能被n整除。为什么?如果余数等于0,则该数字不是质数。)
三种方式:
1。
int main () { for (int i=2; i<100; i++) for (int j=2; j*j<=i; j++) { if (i % j == 0) break; else if (j+1 > sqrt(i)) { cout << i << " "; } } return 0; }
2。
int main () { for (int i=2; i<100; i++) { bool prime=true; for (int j=2; j*j<=i; j++) { if (i % j == 0) { prime=false; break; } } if(prime) cout << i << " "; } return 0; }
3。
#include <vector> int main() { std::vector<int> primes; primes.push_back(2); for(int i=3; i < 100; i++) { bool prime=true; for(int j=0;j<primes.size() && primes[j]*primes[j] <= i;j++) { if(i % primes[j] == 0) { prime=false; break; } } if(prime) { primes.push_back(i); cout << i << " "; } } return 0; }
编辑:在第三个示例中,我们跟踪所有先前计算的素数。如果一个数字可以被一个非质数整除,则也存在一个质数<=该除数也可以被其除以。这将计算量减少了primes_in_range / total_range。