【发布时间】:2011-07-09 05:21:31
【问题描述】:
此 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(number)。 \ 如果 n 大于 sqrt(number),则 number 不能被 n 整除。 为什么?如果任何余数等于 0,则 number 不是素数。)
【问题讨论】:
-
你指的是什么书?
-
如果您将来需要生成素数,请查看Sieve of Eratosthenes
-
@Sahat 你的书错了。 1 不是质数。它既不是质数也不是合数。
-
@R..:这肯定会引起我的反对。如果我要费心下载一个包含最多 20 亿个素数的列表并用它来膨胀我的代码,那我就麻烦了,因为我自己计算它们会无聊。
-
@R..:我不知道,我可以编写一些非常紧凑的代码来生成它们,我猜二进制大小的断点如果存储为 int(400 字节)最多可能是 100 个素数x86 或 ARM 生成素数是奢侈的,编译器是否真的发出这是另一个问题),源大小的断点更小,但一旦你拉入
printf,二进制文件就会变大。字符串文字的问题,如果我们认真对待它(我有点同意我们不必在 4k 级别),也适用于数组,因为您需要在单个“逻辑源代码行”中初始化它们。跨度>