使用shell程序编写一个线性筛
今天刚学了shell编程,老师布置了一个作业
## Shell作业:Prime.sh
> 求一定范围内的素数和。
>
> 采用`线性筛实现`
1. 传入两个参数
1. 第一个为起始数字`start_num`(包含该数字)
2. 第二个为终止数字`end_num`(包括该数字)
2. 如果`start_num`小于`0`,则起始数从`0`开始
3. 输出该范围内的所有`素数的和`
4. 使用方式`bash Prime.sh 0 1000`
使用shell编程和C语言编程的思路是一样的,只是语法不同,没了解过使用C语言实现线性筛的可以去了解一下,废话不多讲直接上源代码
#!/bin/bash
cnt=0 #!记录素数的下标
sum=0 #!定义求和变量
start_val=$1
end_val=$2 #!传入的开始和结束
function _init_ {
for (( i = 2; i <= $end_val; i++ ));do
if [[ ${prime[${i}]} -eq 0 ]];then
cnt=$[${cnt} + 1]
prime[${cnt}]=${i}
fi #!如果是素数就添加到prime数组中
for (( j = 1; j <= ${cnt}; j++ ));do
if [[ ${i}*${prime[${j}]} -gt $end_val ]]; then
break
fi #!如果大于end_val, 不用再标记
prime[${prime[${j}]}*${i}]=1 #!标记合数
if [[ ${i}%${prime[${j}]} -eq 0 ]]; then
break
fi #!防止重复标记
done
done
return
}
_init_ #!函数的调用
if [[ $start_val -lt 0 ]]; then
start_val=0
fi #!去除小于0的start_val
for (( i = 1; i <= $cnt; i++ )); do #!对于素数求和
if [[ ${prime[${i}]} -ge $start_val ]]; then
sum=$[$sum+${prime[${i}]}]
fi
done
echo $sum #!输出求和结果
使用方式:
bash Prime.sh 0 1000
运行结果
对你有帮助的同学帮忙点个赞哦!!