打印从1到100的质数

此c ++代码输出以下素数:

但是我不认为这是我的书希望这样写的方式。它提到一些关于数的平方根的事情。因此,我确实尝试将第二个循环更改为,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。

以上是 打印从1到100的质数 的全部内容, 来源链接: utcz.com/qa/408861.html

回到顶部