你好, 欢迎｡
我想提供一个 演示解决我们先前挑战的方案, 就是编写一个生成素数的程序｡
所以再一次, 重点是 是使用数组, 您要学习所有
关于数组的知识, 并通过这样做来实现｡
所以我试着描述 素数算法｡
不过, 我还是要再提一次,
你可以检查一个素数是否是素数｡
质数意味着 它不能被任何其他质数整除.
这就是算法的概念 我们要经过的地方｡
而这就是为什么 素数是因为任何非素数都可以用
作为素因子的倍数｡
例如20有 素因子2､ 2和5｡
所以通过了解这些, 这告诉你 素数不能被其他素数整除｡
因此, 这有助于 有效的素数测试｡
所以你能做的就是 可以检查先前生成的素数｡
这样我们就可以将之前
在一个数组中生成素数, 这就是我们 可以找到此信息｡
同样, 任何9个素数n都必须 具有作为其因子之一的整数, 该整数小于或
等于n的平方根｡
所以这意味着只有
通过检验一个给定的整数是否为偶数来确定它是否为素数 对所有素数因子的整除性, 直到整数的平方根｡
所以你可以停下来 这再次使其更有效｡
这将是显而易见的 在我的内部循环中, 当我跳出去判断我是否
我还没找到质数.
我会跳出来如果我得到 整数的平方根, 这基本上是个退出条件
让我们来看看 你可以用p除以素数来检验 大于素数sub-I, 我们将在最内层循环中使用它来
检验p的值是否超过素数I的平方根｡
现在我们来看看代码 块开始编写一些代码｡
我们要做一些基本的 在这里, 创建一个项目｡
我们将把这个项目命名为素数｡
现在, 我们转到新项目, 然后转到控制台应用程序｡
我们将它命名为素数｡
接下来我们不去了 使用此编译器｡
我在玩 编译器我想确保我有正确的编译器
只需使用cygwin编译器｡
所以它产生了我的主 源文件, 它是空
让我们去掉printf 然后开始写代码｡
我们将包括一个 文件名为标准公牛｡
我还没这么做;我一直 将布尔值创建为下划线｡
让我们做个小测试 我希望能够做bool｡
现在我们可以使用bool了｡
所以通常在C89中, 数据类型 表示真或假是下划线布尔值｡
但是你可以有一种类型 定义, 并在标准bool文件中
只使用布尔值, 还允许使用true
false作为值｡
所以我们要创造一些 变量｡
我们将创建计数器 我们把它命名为p｡
这将是我们的计数器 从p到100个数字的循环｡
这将是我们的外部循环｡
我们还将创建一个 内部循环计数器变量
这是我们检查的地方 我们之前的质数｡
实际上, 我们不会初始化它 这里我们将在循环中初始化它｡
我们将创建数组 也就是质数的整数,
大小是50
我们不会初始化 它现在是0以外的任何值｡
然后我们将创建一个
这将帮助我们跳过所有的偶数 我们将其设为2｡
这个变量实际上
以确保我们从正确的索引开始, 因为我们要 硬编码前两个数字｡
这就是我们要做的第一件事｡
我们要硬编码 我们的前两个质数｡
这就是我们访问数组的方法｡
我们知道如何创建一个 10, 您只需指定数据类型, 后跟名称,
然后在 方括号用于指定大小｡
然后我们开始 这是我们可以做到的C99特性｡
并将数据分配给数组, 我只需要说出数组名称, 然后是索引值｡
请记住, 数组是以0为基底的｡
所以我说是0以下的素数｡
第一个质数是2｡
2是第一个素数｡
第二个质数是 等于3｡
这样我就有了一些质数 我之前可以用来测试其他质数的数字｡
现在开始循环｡
我们需要一个 循环遍历从5到100的所有数字｡
我们知道4不是质数 所以我5点开始｡
所以我们可以说4p等于5, p是 小于或等于100, 然后我们跳过偶数｡
所以我们会说 p等于p加2｡
我们不需要查看任何数字, 这将是我们的外部循环｡
再说一遍, 你应该 同时进行测试
现在我们还要设置 一个布尔变量, 它会告诉我们
我们找到了一个质数｡
这里我可以使用bool, 我将创建一个局部变量布尔是素数｡
我将初始化它 是true,
因为我只会将它设为false
遍历了之前生成的素数的整个列表, 或者 我找到了最后一个质数, 确保不是平方根.
那么质数是 对于从5到100的每次迭代跳过2等于真｡
现在我的内部循环将 我们之前生成的所有质数｡
使我们没有走得更远 I的平方根｡
所以我们要回顾一下 直到平方根, 这就是x条件.
我们还将退出 如果我们找到一个质数
所以我们说如果是素数
是真的, 我们已经超过了极限, 也就是p 除以素数次I大于或等于素数次I｡
然后我们再加上 I是循环控制变量｡
这是真正的 算法的密钥｡
所以我们要试着
求出5到100的所有素数, 跳过偶数
然后在内部循环中
从1开始, 我们将一直进行, 直到设置 为真素数或者我们已经达到了退出条件
数p除以素数I大于素数I, 这就是
当我们求出平方根的时候, 我们就得到了, 因为 算法的另一个条件｡
如果那是我们的回路, 在里面
我们要检查素数｡
一个数是素数的方式 就是用它除以这个数
如果你没有一个 0, 那么您可以开始了｡
所以你可以做一个p mod 素数sub-I等于0｡
如果这是真的, 那么你就没有质数｡
因此, 您可以将 布尔值等于false｡
然后我们就这么做 因为我们要做的就是
将布尔值设置为false｡
那就说明我们没有 找到一个素数,
所以我们不想把p加到素数数组中.
最后一件事就是 检查布尔值是否被设置为true, 如果被设置为true,
那么我们要填充数组.
我们要将它添加到数组中｡ 所以我们 加到数组中我们会发现质数｡
所以我们只要说素数和 那么我们称之为素数索引｡
因为, 记住,
这是 它实际上是用我们要放入的索引表示的 数组, 我们要从元素3开始, 索引为2.
所以我们要确保把它放进去
数组中的右点, 我们将其设为p, 因为p是 因为这是for循环的外层｡
我们想看看 这是一个质数
我们5点开始｡
我们说如果5是素数, 如果 我们可以从1开始查这些数字, 然后与
如果它不能被0整除, 那么我们是好的
我们每件事都要这样做｡
然后我们最后一件事 我们只想递增主索引｡
所以下次我们找到质数时 号码, 我们在正确的索引中｡
就是这样｡
这是整个 寻找素数的算法｡
所以你想把它保存 确保一切就绪｡
我们很好｡
所以我喜欢把真假加 值, 请不要忘记这一点｡
然后我们最后一件事 我们只需要打印出质数｡
所以我们只需要一个简单的for循环｡
我们要把它们打印出来 都在同一行上, 所以我们不添加换行符｡
所以我们要做的是 我们将把循环控制变量重新实例化为0I｡
我们要一路走到 主索引, 它是数组中所有元素的大小
把它打印出来, 用一行,
百分比I或d和质数下标I｡
最后, 我们将添加一个换行符｡
类似这样的东西加上分号｡
但同样, 事情要 注意事项｡
首先, 注意缩进, 所有的块都是缩进的｡
我们有时会使用括号 在我们的块中有多个语句,
有时候我们没有｡
在第行的if语句中 25, 我们没有使用任何括号｡
For循环应该变成 已经成了我的第二天性
您真正想要的是 这个赋值就是数组｡
所以我们要创建一个叫做素数的数组 将其大小设置为50, 将所有内容初始化为0｡
然后我们设置第一个 2个元素到2和3, 然后整个算法从19到 第32行是通过查看数组来确定它是否为素数
在前面的素数中｡
而且当你在 大于平方根｡
所以你又看到了很多
方括号用于访问数组和赋值 到数组等等, 非常简单
所以我们来建造这个 看看会发生什么｡
我们没有警告, 没有错误｡
如果我们运行这个, 你会看到 输出的是所有到100 2 3 5 7 11
13 17的素数 19 23 29 31 37 41 43等等｡
这些都是质数｡
质数是 仅仅是它本身的一个因素｡
你不能把它除以任何其他 数, 且没有余数｡
所以只有两个因素 进入1区和97区
这是一个很好的快速程序｡
我会提供解决方案｡
你可以分析一下｡
但关键的要点是 数组以及我使用的标准bool
允许我们创建没有下划线大写的布尔数据类型
b, 还允许您使用true false值, 而不是1和0｡
希望这对你有帮助｡ -谢谢—谢谢