shell练习--PAT题目1007:关于素数对(失败案例)

让我们定义d?n??为:d?n??=p?n+1??−p?n??,其中p?i??是第i个素数。显然有d?1??=1,且对于n>1有d?n??是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

这个题目,我一直没弄明白,然后走了很多逻辑误区,然后用了很多for的循环来判断。基本思路:  1.定义函数,用来判断数字x是不是素数;  2.循环判断 输入的数字 n 的范围数字 2<=x<=n 是不是素数,然后放入一个数组中;  3.判断ss[i+1]-ss[i]是否=2 等于则+1;
#!/bin/bash

func_sushu(){
for (( i=2 ;i < $x; i++ ))   #最小的素数为2,所以以2作为起点
do
        cond=true
        if [[ $(expr $x % $i) -eq 0 ]]
        then
                cond=false
                break
        fi
done

if $cond  #判断状态变量,如果存在false,则为非素数
then
        return 0
else
        return 1
fi
}

read  -p " input number:" n

(( $n - 0)) && if [ $? -ne 0 ] || [ $n -lt 2 -o $n -gt 1000000 ];then echo "$n is not need!" ;exit 1 ;fi

count=1
ss[0]=2 #2是最小的素数
for ((j = 3 ; j <= $n ; j++))
do
        x=$j
        func_sushu
        if [ $? -eq 0 ]
        then
                ss[$count]=$j
                let count++
        else
                continue
        fi
done

echo ${ss[@]}

i=0
sum=0
for ((i>=0;i<$n;i++ ))
do
        num1=`echo ${ss[$(expr $i + 1)]}`
        num2=`echo ${ss[$i]}`
        if [ -n "$num1" ]  #这里对于非空的判断需要加双引号,不然会出现判断 ] 的逻辑错误
        then
                if [ $(expr $num1 - $num2) -eq 2 ]
                then
                        let sum++
                fi
        else
                break
        fi
done
echo $sum

太感动了,居然只有一个绿

现在基本获取了想要的结果了,但是需要优化

  1.去掉多余的代码;

  2.用 j <= $n的平方根的逻辑判断是否为素数(参照其他代码);--运行超时的问题

#!/bin/bash

func_sushu(){
local count=1
ss[0]=2
for ((j = 3 ; j <= $n ; j++))
do
        for (( i=2 ;i <= $(echo "scale=0 ;sqrt($j)" |bc ); i++ ))
        do
                cond=true
                if [[ $(expr $j % $i) -eq 0 ]]
                then
                        cond=false
                        break
                fi
        done
        if $cond
        then
                ss[$count]=$j
                let count++
        else
                continue
        fi
done
}

read  -p "input number:" n
(( $n - 0)) && if [ $? -ne 0 ] || [ $n -lt 2 -o $n -gt 1000000 ];then echo "$n is not need!" ;exit 1 ;fi
func_sushu
i=0
sum=0
for ((i>=0;i<$n;i++ ))
do
        if [ -n "`echo ${ss[$(expr $i + 1)]}`" ] && [ $(expr $(echo ${ss[$(expr $i + 1)]}) - $(echo ${ss[$i]})) -eq 2 ]
        then
                let sum++
        else
                continue
        fi
done
echo $sum

  阿希吧,五红变1红

原文地址:https://www.cnblogs.com/wyf-349/p/11263175.html

时间: 2024-11-13 17:18:23

shell练习--PAT题目1007:关于素数对(失败案例)的相关文章

shell练习--PAT题目1004: 成绩排名 !(失败案例)

读入 n(>)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 n 第 2 行:第 1 个学生的姓名 学号 成绩 第 3 行:第 2 个学生的姓名 学号 成绩 ... ... ... 第 n+1 行:第 n 个学生的姓名 学号 成绩 其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的. 输出格式: 对每个测试用例输

2019年7月25日 shell练习--PAT题目1006:换个格式输出整数(失败案例)

让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<),换个格式来输出任一个不超过 3 位的正整数.例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”.3 个“十”.以及个位的 4. 输入格式: 每个测试输入包含 1 个测试用例,给出正整数 n(<). 输出格式: 每个测试用例的输出占一行,用规定的格式输出 n. 输入样例 1: 234 输出样例 1: BBSSS1234 输入样例 2: 23 输出样例 2: SS123 这

九度oj 题目1007:奥运排序问题

九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1. 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万). 接下来一行给出M个国家号. 输出:                        排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名 格式为: 排名:排名

题目1007:奥运排序问题

题目描述: 按要求,给国家进行排名. 输入: 有多组数据.第一行给出国家数N,要求排名的国家数M,国家号从0到N-1.第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万).接下来一行给出M个国家号. 输出: 排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名格式为: 排名:排名方式如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例 如果有并列

失败案例

2.亿唐网 缺少定位,融资过多 一旦认准方向之后,集中公司和个人的资源在一个产品上.什么都想做,什么都做不好. 兵贵神速.速度是制胜的关键.在IT行业,永远是快鱼吃慢鱼. 几个出色的人才远胜于几十个毫无激情的庸人. 找人一定要高标准.考虑到机会成本和招人效率,应该只在名校找人. 建立的制度应该是激励创造力的发挥,而不是去限制个人. 产品一定要做到本行业前三名. 视频网站当年的三杰之一,优酷,土豆和酷6.其中优酷的古永锵,和李善友都是搜狐系,土豆王微是文艺青年.一度风风火火.   失败的教训:路线

程序员加入创业公司失败案例

今天看到一篇文章<万众传业,程序员的血泪史>里面讲了几个很典型的加入创业公司失败案例,值得每一个想找创业公司你程序员思考,现将故事转载如下. 故事一.少听『商业精英』讲故事,听多了中毒 首先你必须承认,创始人 CEO 都是特别能说的家伙.一个有判断能力的明智的程序员,首先需要具备的品质就是要保持冷静,不要轻易被人打鸡血. 下面是一朋友(因为隐私原因,他让我不提名字,我就直接 copy 故事了)的创业经历和总结反思,写得非常受用,我之前也转到过程序员客栈技术圈. 我的上一家公司 CEO 是个新加

源代码防泄密的失败案例(文档加密软件)

使用文档加密软件加密保护源代码,实现源代码防泄密.目前实践效果很差,以下失败案例可供查证: 比亚迪.宇龙通讯.酷派.国人通讯等(都是同一家公司做的,名字就不说了,问用户就知道了,北京的.) 1)卡.慢.蓝屏.损坏数据: 2)存在漏洞.安全性不高: 3)技术上争议不断:

Citrix XenDesktop VDA升级失败案例分析

今天处理了一个关于Citrix XenDesktop VDA升级失败的案例,这里跟大家分享一下. [背景] 用户需要将现有的XenDesktop5.6的环境升级到XenDesktop7.5,Citrix支持这种场景的支持,用户在更新VDA的是否发现升级失败. [问题描述] 具体错误信息可以参考以下截图: 具体的错误信息: rror Id: XDMI:1414B9D7 Exception:     Citrix.MetaInstaller.MetaInstallerException Instal

RF失败案例重跑

1.1        失败案例重跑 该功能主要是针对上次连跑失败的案例需要重新执行测试的情况,可自动识别上次执行失败的案例并进行重跑,无需手动选择相应的案例,简单高效. 1.5.1.        重跑项目失败案例 命令格式:"pybot -R 上次执行失败的output.xml文件所在路径 -d 本次重跑结果output.xml文件保存路径 项目所在路径", 其中的参数包括"上次执行失败的output.xml文件所在路径"."本次重跑结果output.x