scratch用列表输出200以内所有的质数,再过滤掉所有与3相关的质数
时间: 2025-06-22 14:40:29 浏览: 7
### 使用 Scratch 编写程序来找出 200 以内的质数并过滤掉包含数字 3 的质数
#### 设计思路
为了实现这一目标,可以按照如下逻辑构建程序:
- **初始化列表**:创建两个列表 `PrimeNumbers` 和 `FilteredPrimes` 来分别存储所有的质数以及经过筛选后的不含数字 3 的质数。
- **遍历范围**:从 2 开始到 200 结束,逐一检验这些数值是否为质数。如果当前测试的数字 n 是质数,则将其加入 `PrimeNumbers` 列表中;进一步检查该质数是否含有字符 '3',如果没有则添加至 `FilteredPrimes` 中。
#### 实现方法
以下是具体的 Scratch 块组合方式描述:
1. 设置变量 `isPrime=1` 表示假设当前处理的是一个质数[^1];
2. 对于每一个待测整数 i (i ∈ [2, 200]) ,执行以下操作:
- 将 isPrime 初始化设为 1;
- 如果 i 大于等于 2 继续下面的操作;
- 遍历 j 从 2 至 sqrt(i),当发现 i 可以被任意一个小于此平方根的正整数 j 整除时,立即将 isPrime 置为 0 并跳出循环;
- 若最终确认 isPrime 仍保持为 1,则说明这是一个新的质数,应追加到 PrimeNumbers 列表里;
- 接下来通过字符串函数检测此新找到的质数是否包含字符 "3",如果不含,则同样地把它也放入 FilteredPrimes 列表内。
```scratch
when green flag clicked
delete all of [PrimeNumbers v]
delete all of [FilteredPrimes v]
set [i v] to [2]
repeat until <(i) > [200]>
set [isPrime v] to [1]
if <<not<(i) = [2]> and <(sqrt of (i))> >> then
set [j v] to [2]
repeat until <<(j) * (j)> > (i)>
if <(i) mod (j) = [0]> then
set [isPrime v] to [0]
stop [this script v]
end
change [j v] by [1]
end
endif
if <(isPrime) = [1]> then
add (i) to [PrimeNumbers v]
if not<contains? (join[i][ ])(letter (length of (number i)) of ["3"])>> then
add (i) to [FilteredPrimes v]
end
end
change [i v] by [1]
end
say join["All primes within 200 are: "]([PrimeNumbers])
say join["Primes without digit 3 are: "]([FilteredPrimes])
```
注意上述代码中的 `contains?` 函数用于判断某串文字是否存在于另一串之中,在实际编程环境中可能需要用其他办法替代,比如利用重复循环配合条件语句逐位比较两者的组成成分。
阅读全文
相关推荐












