蓝桥杯模板(一)

质数,筛质数

#如果是某范围内的所有数的质因数 (应先筛去素数,剩下的再分解) #判断素数 #方法一 from math import sqrt def is_prime1(n): if n == 1: return False for i in range(2,int(sqrt(n))+1): if n %i == 0: return False return True print(is_prime1(5)) #方法二(更快捷) import math # 导入math库 def is_prime2(n): if n > 1: # 判断n是否大于1 if n == 2: # 如果n等于2,返回True,2是素数 return True if n % 2 == 0: # 如果n是偶数但不等于2,返回False,因为除了2,偶数都不是素数 return False for i in range(3, int(math.sqrt(n)) + 1, 2): # 遍历3到sqrt(n),步长为2,因为偶数已经排除 if n % i == 0: # 如果n能被i整除,说明n不是素数,返回False return False return True # 如果循环结束,说明n不是2的倍数也不是奇数的倍数,那么n就是素数,返回True return False # 如果n不大于1,返回False #埃氏筛除 from math import sqrt # 导入平方根函数 def get_prime(n): ls = [True]*(n+1) # 创建长度为n+1的布尔列表,用于标记是否为素数 x = 2 # 初始化起始数字为2 y = int(sqrt(n))+1 # 设置循环上限为sqrt(n),取整加1 while x<y: # 当起始数字小于循环上限时执行循环 for i in range(x*2,n+1,x): # 从起始数字的两倍开始,每次增加x,将x的倍数标记为非素数 ls[i] = False # 将x的倍数标记为非素数 x += 1 # 将起始数字增加1,继续下一轮循环 ls = [i for i in range(2,n+1) if ls[i]== True] # 生成包含所有标记为素数的数字的列表 return ls # 返回素数列表 print(get_prime(20)) # 打印获取20以内的所有素数 #欧拉筛 from math import sqrt # 导入平方根函数 def get_prime(n): ls = [True]*(n+1) # 创建长度为n+1的布尔列表,用于标记是否为素数 x = 2 # 初始化起始数字为2 y = int(sqrt(n))+1 # 设置循环上限为sqrt(n),取整加1 while x<y: # 当起始数字小于循环上限时执行循环 if ls[x] == True: #->埃氏筛的区别 for i in range(x*2,n+1,x): ls[i] = False x += 1 # 将起始数字增加1,继续下一轮循环 ls = [i for i in range(2,n+1) if ls[i]== True] # 生成包含所有标记为素数的数字的列表 return ls # 返回素数列表 print(get_prime(20)) # 打印获取20以内的所有素数

位运算

#位运算 #左移(>>):左移多少位就相当于将某数除以几个2(二进制下末尾数为1的话有精度丢失) #右移(<<):右移多少位就相当于将某数乘以几个2 n mod 2 == n&1 n//2 == n>> 1 求n的第k位数字: n >> k & 1 (二进制的位数) ###位运算 返回n的最后一位1:lowbit(n) = n & -n 补充 https://blog.csdn.net/u013671216/article/details/123534854

求质因数

#求一个所有质因数 n = int(input()) ls = [] i = 2 while i <= n: x = n%i if x == 0: ls.append(i) n = n/i else: i += 1 print(ls) #求所有因数 def get_d(n): res = [] for i in range(1, int(n**0.5) + 1): if n % i == 0: res.append(i) # 将n除以当前因数的结果也添加到列表中 if n // i != i: res.append(n // i) res = sorted(res) return res

快速幂

#快速幂 #推荐使用pow 函数 print(pow(2,4)) #快速幂取模

进制转换

#二进制 bin(b) #正:0bxxxx 负:-0bxxxx def getBin(n): #获得 一个数的二进制字符 b = str(bin(n)) if n<0: return b[3:] else: return b[2:] #十六进制 hex(n) #正 0x... 负 -0x... #八进制 oct(x) #正 0o .. 负-0o ..

公约公倍

#最大公约数 def gcd(a,b): while b: a,b = b,a%b return a #内置库 from math import gcd gcd(a,b) #最小公倍数 def lcm(a,b): s = a*b while b: a,b = b,a%b return s//a

__EOF__

本文作者小苔藓
本文链接https://www.cnblogs.com/taixian/p/18120213.html
关于博主:计算机本科生一枚,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   taixian  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示