平凡人
回答者
回答于 2026-10-22
可通过遍历指定区间、逐一判断素数并利用计数器控制换行的方式实现。
步骤
- 确定区间:明确起始值与结束值(如100到m)。
- 判断素数:对区间内每个整数n,检查其是否能被2到√n之间的任何整数整除。若均不能整除,则n为素数。
- 计数与格式化输出:设置一个计数器变量,初始值为0。每当找到一个素数并输出后,计数器加1。当计数器对每行固定数量(如3)取余等于0时,输出换行符。
Python示例代码
def find_and_print_primes(start, end, per_line):
count = 0
for num in range(max(2, start), end + 1):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(f"{num:<6}", end="")
count += 1
if count % per_line == 0:
print()
if count % per_line != 0:
print()
return count
判断依据
- 素数定义:大于1且只能被1和自身整除的自然数。
- 试除法优化:只需检查到该数的平方根,因为若存在大于平方根的因子,必然对应一个小于平方根的因子。
适用条件
- 适用于区间范围适中、对执行时间要求不极端的场景。
- 若区间极大(如百万级以上),建议改用埃拉托斯特尼筛法(Sieve of Eratosthenes)以提升效率。
常见误区
- 遗漏边界处理:未排除小于2的数(0和1不是素数)。
- 换行逻辑错误:在输出素数之前判断换行,导致首行少输出或末行多出空行。
- 性能问题:内层循环遍历到
n-1而非√n,导致大数判断时耗时过长。 - 格式不对齐:直接打印数字未指定宽度,导致各列无法对齐。可使用格式化字符串(如
f"{num:<6}")设定固定占位宽度。