7-17 小红帽与大灰狼的故事(20 分)
从前有个可爱的小姑娘叫小红帽。一天,小红帽蹦蹦跳跳的要
去奶奶家看望奶奶,奶奶住在村子外面的森林里,离小红帽家
有很长一段路。小红帽刚走进森林就碰到了一条狼。小红帽并
不知道狼是坏家伙,所以一点儿也不怕它。
狼说:“你好啊,小红帽!”
“你好,狼先生!”小红帽说
“小红帽,这么早要到哪儿去呀?”
“我要到奶奶家去。”
大灰狼一听,露出的贪婪的目光,想要吃掉小红帽,但是大灰狼曾经答应过梦工厂的学长,
当想要吃掉小朋友的时候要让小朋友解答一道题目,如果小朋友答对,就放小朋友一条生路,
此时,狼说:“小红帽,我这里有一道题目,如果你能够答对,我就放你一条生路,如果回答错,
我就把你当成我的午餐。我现在要求你找到我的所有“幸运数字”,所谓“幸运数字”是与该数字相邻的两个
数字都是素数,如数字4就是“幸运数字”(4左边是3,右边是5,3和5都是素数)。”
然而,此时的小红帽已经吓傻了,聪明的你能够帮助小红帽解围吗?
输入格式:
输入一个数值n(0<=n<=1000000)。
输出格式:
输出 n以内(不包含n)“幸运数字”的个数
输入样例:
在这里给出一组输入。例如:
7
输出样例:
在这里给出相应的输出。例如:
2
分析:其实是一道水得不能再水的题,只是我竟然不知道素数筛选法............吓死我了,看了一下百度百科后恍然大悟
这个题题就是要用素数筛选法先把所有的<=n的素数都记下来,然后判断就好了,如果不用素数筛选法时间复杂度会比较高,有一个点会超时的,刚开始学lua这门语言,发现这门语言做题还挺好用的,比不上C++,但比C好用多了
闲话少说,上代码
n = io.read("*number") --读入一个数
result = 0
prime = {} --素数数组,1表示是素数,0表示不是素数
for i = 1,n do
prime[i] = 1
end
prime[1] = 0
prime[0] = 0
for i=2,n do --筛选素数,先认为所有的都是素数,然后找到第一个是素数的,将它的所有倍数都设置为不是素数
if prime[i] == 1 then
for j = i*2,n,i do
prime[j] = 0
end
end
end
for i = 0,n-1 do --找到所有的幸运数,并统计其数量
if i>=2 and prime[i-1]==1 and prime[i+1]==1 then
result = result + 1
end
end
print(result) --打印幸运数的数量