shell编程实现线性筛

使用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

运行结果
在这里插入图片描述
对你有帮助的同学帮忙点个赞哦!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值