打印从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