文章目录
- P1125 [NOIP2008 提高组] 笨小猴
-
- 分析
- 代码
-
- 通过截图
- 质数
-
- 分析
- 代码(一个很普通的方法)
-
- 通过截图
- 代码(埃筛法)
-
- 通过截图
P1125 [NOIP2008 提高组] 笨小猴 【蓝桥杯|蓝桥杯素数(二)】
文章图片
分析
- 这个我直接用Counter计数器做方便快捷。利用Counter计数器进行统计,统计完直接遍历字典的值即可。最大值和最小值肯定会大于等于1,所以最小值初值设成0,由于字符串长度小于100,所以最大值初值设为100。
import math
from collections import Counter
def is_prime(n):
if n == 1 or n == 0:
return False
m = int(math.sqrt(n)+1)for i in range(2,m):
if n % i == 0:
return False
return Trues = input()
s_dic = Counter(s)
Max = 0
Min = 100
for i in s_dic.values():
if i > Max:
Max = i
if i < Min:
Min = iif is_prime(Max-Min):
print("Lucky Word")
print(Max-Min)
else:
print("No Answer")
print(0)
通过截图
文章图片
质数
题目描述
给定一个正整数 N,请你输出 N 以内(不包含 N)的质数以及质数的个数。输入描述
输入一行,包含一个正整数 N。 1≤N≤1000
输出描述
共两行。第 1 行包含若干个素数,每两个素数之间用一个空格隔开,素数从小到大输出。第 2 行包含一个整数,表示N以内质数的个数。输入输出样例
示例
输入10输出2 3 5 7
4运行限制
最大运行时间:1s
最大运行内存: 128M
分析
- 第一种方法就不说了就是简单的遍历到根号n查询
- 第二种方法比较有意思叫埃筛法,比如我有一个1到n的序列,1不是质数不用加入,2是质数加入,筛掉范围内2的倍数,3是质数加入,筛掉范围内所有三的倍数。以此类推。注意:这种方法耗费了大量的空间换取了时间,因为建立了flag数组,所以一般只适用于10的7次方的规模。(可能有更好的可以节省空间的写法,但我不会)
import mathdef is_prime(n):
if n == 1 or n == 0:
return False
m = int(math.sqrt(n)+1)for i in range(2,m):
if n % i == 0:
return False
return Truen = int(input())
res = []
for i in range(1,n):
if is_prime(i):
res.append(i)for i in res:
print(i,end=" ")
print()
print(len(res))
通过截图
文章图片
代码(埃筛法)
import mathdef set_prime(n):
flag = [True for i in range(n+1)] # 创建n个标记,False:非质数,True:质数
prime_list = [2]
# 存质数
for i in range(3,n,2): # 创建奇数数列,提前筛掉了2
if flag[i]:
prime_list.append(i)
for j in range(i*2,n+1,i):
if j % i == 0:
flag[j] = False
return prime_listn = int(input())
res = set_prime(n)
for i in res:
print(i,end=" ")
print()
print(len(res))
通过截图
文章图片
如有错误,敬请指正,欢迎交流,谢谢?(?ω?)?
推荐阅读
- 算法学习|最近公共祖先之树上倍增求法
- 算法|【路径规划】基于蚁群算法求解栅格地图路径规划问题matlab源码含GUI
- 算法|【TSP问题】基于蚁群算法求解TSP问题matlab源码
- 最优化实战例子|万字长文带你了解蚁群算法及求解复杂约束问题【源码实现】
- 算法|面试时遇到一致性哈希算法这样回答会让面试官眼前一亮
- 深度学习论文研读|目标检测网络R-CNN系列与yolov1算法原理概述
- 数据结构与算法|堆排序python实现及时间复杂度分析
- C语言|求最小公倍数的三种方法(C语言)
- 人工智能|干货!人体姿态估计与运动预测