当前位置: 首页 > news >正文

蓝桥杯 之 数论

文章目录

  • 习题
    • 质数
      • 找素数

  • 数论,就是一些数学问题,蓝桥杯十分喜欢考察,常见的数论的问题有:取模,同余,大整数分解,素数,质因数,最大公约数,最小公倍数等等

素数

  • 首先介绍这个素数的问题,也就是质数,只能被1或者本身整除,最小的素数是2
  • 需要掌握埃氏筛或者欧拉筛求解出1-n的范围内的所有的质数
is_prime = [True]*(N+1)
prime = []
for i in range(2,N+1):
	if is_prime[i]:
		prime.append(i)
		for j in range(2*i,N+1,i):
			is_prime[j] = False
# 最后的话,这个prime 会存储所有的质数

求解一个数的质因数

求解最小质因数

  • 同样,也可以使用埃氏筛,也可以使用欧式筛
def minprime(n):
	i = 2
	while i*i <= n:
		if n % i == 0:
			return i
		i += 1
	# 质数最后会返回自己本身
	return n

求解一个数的全部的质因数组成
在这里插入图片描述

def zuprime(n):
	ans = []
	i = 2
	while i*i <=n:
		while n % i == 0:
			ans.append(i)
			n = n // i
		i += 1
	if n > 1:
		ans.append(n)
	return ans
		
			

求解一个范围内的数的最小质因数

使用欧式筛,欧式筛的原理就是,每一个数只会被最小质因数所筛选,所以相对于埃氏筛来说具有优势

# 在这里我们初始化全部的数的最小质因数都是1,也包括质数
minprime = [1]*(N+1)
is_prime = [True]*(N+1)
prime = []
for i in range(2,N+1):
	if is_prime[i]:
		prime.append(i)
	for j in prime:
		if i*j > N :
			break
		is_prime[i*j] = False
		min_prime[i*j] = j
		# 保证只能被最小质因数筛选
		if i % j == 0:
			break

最大公因数

  • a和b的最大公因数表示,可以整除a,b的最大的公因数,一般使用辗转相除法进行求解
import math
# 需要求解a,b的最大公因数,可以直接调用这个gcd函数进行求解
ans = math.gcd(a,b)

最小公倍数

  • a和b的最小公倍数LCM可以通过这个与最大公因数的关系进行求解
# lcm(a,b) = a*b // math.gcd(a,b)

组合数

在这里插入图片描述

快速幂
在这里插入图片描述

  • 可以使用pow方法求解取模的幂次,类似于快速幂
result = pow(base, exponent, mod)  # 计算 (base ** exponent) % mod

# 也可以手动实现上述功能
def quick_pow(a, n):
    ans = 1
    while n > 0:
        if n & 1:  # 如果该二进制位存在
            ans = ans * a % MOD
        a = a * a % MOD
        n >>= 1  # n除以2,判断下一个二进制位
    return ans
	

容斥定理
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

错位排序

在这里插入图片描述

在这里插入图片描述

习题

质数

找素数

在这里插入图片描述

  • 由于是填空题,直接暴力求解
N = 10**7
prime = []
is_prime = [True]*(N+1)
for i in range(2,N+1):
    if is_prime[i]:
        prime.append(i)
        for j in range(i*2,N+1,i):
            is_prime[j] = False
if len(prime) > 10**5 +2 :
    print(prime[10**5+1])
# 1299743

相关文章:

  • C++学习之QT中HTTP正则表达式
  • 基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务
  • 面试复习-基础网络+运维知识
  • 指针与引用的深度解析 (408数据结构入门)
  • 深入解析数据结构中的表:从数组到哈希表
  • 新能源市场科技变革:用Python解码产业趋势与技术创新
  • C 语 言 --- 操 作 符 2
  • 开源新星YT-Navigator:重新定义你的视频探索之旅!
  • Embedding类与word2vec模型
  • SQL Server——表数据的插入、修改和删除
  • 信息学奥赛一本通 1610:玩具装箱 | 洛谷 P3195 [HNOI2008] 玩具装箱
  • 银联无感支付实现
  • leetcode_双指针 11. 盛最多水的容器
  • 两市总的净流出和净流入来分析情况
  • OO_Unit1
  • 【C++11】左值引用、右值引用和移动语义
  • 20250321在荣品的PRO-RK3566开发板的buildroot系统下使用ll命令【直接编译进IMG】
  • 《人脸识别技术应用安全管理办法》
  • AI风向标《AI与视频制作全攻略:从入门到精通实战课程》
  • [AI建模] 使用Pinokio本地化部署混元2D到3D AI建模服务
  • 联合国报告:全球经济前景恶化,面临高度不确定性
  • 泽连斯基抵达安卡拉,称乌将派出最高级别代表团参与谈判
  • 与总书记交流的上海人工智能实验室年轻人,在探索什么前沿领域?
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆
  • 制造四十余年血腥冲突后,库尔德工人党为何自行解散?
  • 挖掘机4月销量同比增17.6%,出口增幅创近两年新高