shell练习--PAT题目1007:关于素数对(失败案例)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为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红
shell练习--PAT题目1007:关于素数对(失败案例)的更多相关文章
- shell练习--PAT题目1001:卡拉兹(Callatz)猜想(失败案例)
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 年的世界 ...
- shell练习--PAT题目1005:继续(3n+1)猜想(全绿失败喜加一)
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...
- shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A ...
- 2019年7月25日 shell练习--PAT题目1006:换个格式输出整数(失败案例)
让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<),换个格式来输出任一个不超过 3 位的正整数.例如 234 应该被输出为 BBSSS123 ...
- shell练习--PAT题目1004: 成绩排名 !(失败案例,shell运行超时)
读入 n(>)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 n 第 2 行:第 1 个学生的姓 ...
- shell练习--PAT题目1002:写出这个数(失败案例)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...
- shell练习--PAT题目1003:我要通过!(成功案例)
“答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: ...
- shell练习--PAT试题1010:一元多项式求导 (25 分)(失败案例喜加一)
---恢复内容开始--- 1010 一元多项式求导 (25 分) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系 ...
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...
随机推荐
- Day02:变量 / JAVA基本类型
变量 什么是变量? 变化数值的载体 变量声明.初始化.使用 声明变量 类型 大小(占用空间) int x; 初始化变量 (赋值) 给予占用空间 int x=35; 使用变量 直接使用变量名 注意: ...
- 人工智能AI------有限状态机、分层状态机、行为树
https://www.cnblogs.com/zhanlang96/p/4793511.html 人工智能遵循着:感知->思考->行动决策方法:有限状态机(Finite-State Ma ...
- 平衡树(fhq无旋treap)
fhq板子(代码正确且风格易懂) 洛谷P3369 #include<iostream> #include<cstring> #include<cstdio> #in ...
- 【计算机视觉】Emvisi2
Emvisi2: A background subtraction algorithm, robust to sudden light changes Making Background Subtra ...
- js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue
思路:vue中图片合并 首先准备好要合并的背景图,和请求后得到的二维码, canvas画图,将两张背景图和一张二维码用canvas画出来, 将canvas再转为img 注意canvas和图片的清晰图和 ...
- python 迭代器(第二次总结)
迭代器 1.先明白迭代器是什么意思 迭代:不断的取值的(器)工具 迭代器:就是一个重复的过程,每一次重复都是基于上一次的结果而来的. (单纯的重复不是迭代) 2.为什么要有迭代器 不依赖索引取值的方法 ...
- hive_server2的权限控制
CDH的core-sit开启: 第一个false表示用系统用户来和hive用户的权限绑定,但经测试并没有生效,所以可以改为true 第二项设置成ALL,表示创建者对其创建的表拥有所有的权限,这样也是比 ...
- Java -cp命令的使用
服务器跑程序,用到了一些Linux命令,做个简单笔记. Linux(Mac)下 java -cp .:jar包路径 主类的全限定名称 全限定名有绝对路径的意思,比如一个文件file的存放路径, ...
- Codeforces 1215C. Swap Letters
传送门 好像是个挺显然的贪心 首先每次交换当然要尽量一次交换就多两个相同的位置 即 优先把 $\begin{bmatrix}a\\ b\end{bmatrix}$ 和 $\begin{bmatrix} ...
- homebrew学习(四)之取消homebrew自动更新
homebrew自动更新 使用brew install /brew cask install安装软件总是先updating HomeBrew…,速度很慢 取消homebrew自动更新 方法一:使用命令 ...