此 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++)
但它没有给我我需要的结果。
我需要如何将此代码更改为我的书想要的方式?
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 之间的每个数字,
求余数 = Number % n,其中 n
范围从 2 到 sqrt(数字)。 \如果n
大于 sqrt(number),则
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;
}
编辑:在第三个示例中,我们跟踪所有先前计算的素数。如果一个数可以被一个非素数整除,那么还有一些素数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)