蓝桥杯 之 数论

news2025/3/22 17:02:42

文章目录

  • 习题
    • 质数
      • 找素数
    • LCM
      • 报数游戏
    • 快速幂
      • 数字诗意
    • 组合数与错位排序
      • 小蓝与钥匙
    • 同余
      • 取模

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

整除
在这里插入图片描述

取模
在这里插入图片描述

同余

  • 两个数同余,就是a % k = b % k,对于对同一个数的同余,那么就意味着a = b + x*k,意味着它们相差k的倍数,也就有(a-b) % k = 0

在这里插入图片描述

素数

  • 首先介绍这个素数的问题,也就是质数,只能被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

LCM

报数游戏

报数游戏

在这里插入图片描述

  • 很明显,这个题目不可能会让你从一开始就进行大范围的暴力求解
  • 所以还是考虑在小范围之内打表找规律
ans = []
for i in range(1,10**3+1):
    if i % 20 == 0 or i % 24 ==0:
        ans.append(i)
print(ans)
# 输出情况
[20, 24, 40, 48, 60, 72, 80, 96, 100, 120, 140, 144, 160, 168, 180, 192, 200, 216, 220, 240, 260, 264, 280, 288, 300, 312, 320, 336, 340, 360,····]

  • 即使在打表之前,我们就应该想到,这个找的是20或者24的倍数,那么他们的倍数在什么时候会重合?这里就回到了这个LCM的问题,我们可以发现LCM(20,24)=120,所以对于打表之后的输出找规律,发现,刚好120范围就会有10个数字,类似于这个进制一样,我们只需算出n是10个多少倍数,然后再对应余数找到这个对应的基数,后面再乘再+即可
num = [20, 24, 40, 48, 60, 72, 80, 96, 100, 120]
print(202420242024//10)
# 答案是 20242024202
print(202420242024%10)
# 答案是 4

print(120*20242024202+48)
# 答案是 2429042904288

快速幂

数字诗意

数字诗意

在这里插入图片描述
在这里插入图片描述

  • 首先的思考,由于数字的范围十分大,所以考虑还是找规律,(其实数据范围较大的时候,就得考虑这个数字规律的问题,一般有幂次,循环规律等)
  • 当然,还是老方法,通过打表进行求解,但是如何打表就成为我们现在应该考虑的问题!
  • 暴力也是一种学问!:我们可以从1开始逐一枚举连续的和的开始位置,再枚举向右的位置
notres = []

def check(num):
  # 枚举开始位置
  for i in range(1,num):
    ans = 0
    # 枚举结束的位置
    for j in range(i,num):
      ans += j 
      if ans > num:
        break
      elif ans == num:
        return True

直接暴力求解是可以通过30%的测试用例的

  • 但是我们可以把打表的结果输出找规律!
# notres 数组如下
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192]
# 可以看到都是2的幂次,所以可以得到是2的幂次都是不满足的
  • 现在的任务转化为这个快速求解出10^16那么大的一个范围内的2的幂次的值,然后存储起来,那么大的范围的一个幂次的问题,直接转化为这个快速幂的问题
# 10**16
notres = []
i = 0
# python直接调用这个pow函数进行求解
while pow(2,i) <= 10**16:
    notres.append(pow(2,i))
    i += 1
  • 两个代码相互结合,就可以通过全部的测试用例
import os
import sys

# 请在此输入您的代码

notres = []

# 10**16
notres = []
i = 0
while pow(2,i) <= 10**16:
    notres.append(pow(2,i))
    i += 1

n = int(input())
a = list(map(int,input().split()))
cou = 0 
for nu in a:
  if nu in notres:
    cou+=1
print(cou)

组合数与错位排序

小蓝与钥匙

小蓝与钥匙

在这里插入图片描述

  • 很容易看出来这是一个错位排序的问题,直接套公式dp[i] = (i-1)*(dp[i-1]+dp[i-2])
  • 题目求解的是这个方案数,我们得在28个孩子中先选择14个孩子,作为错位排序的对象,剩余的就正常对应,所以这个还考察了这个组合数的问题
import os
import sys

# 请在此输入您的代码

# 错位排序+组合数
# 从28个孩子中选出14个孩子的方案数乘剩余14个错位排序的方案

dp = [0]*15
dp[1] ,dp[2] = 0,1
for i in range(3,15):
  dp[i] = (i-1)*(dp[i-1]+dp[i-2])

# 从28个孩子中选出14个孩子,28! // (14!*14!)

tmp1 ,tmp2 = 1,1
for i in range(1,29):
  tmp1 *= i 
  if i <= 14:
    tmp2 *= i
zu = int(tmp1 / (tmp2*tmp2))
print(dp[14]*zu)
# 答案是 1286583532342313400

同余

取模

取模

在这里插入图片描述
在这里插入图片描述

  • 其实题目中的m的范围并没有那么大,我们直接采用暴力的做法即可
import os
import sys

# 请在此输入您的代码

# 取模,是否存在?
# 直接暴力求解
def check(num,m):
  store = set()
  for i in range(1,m+1):
    tmp = num % i 
    if tmp in store:
      return True
    else:
      store.add(tmp)
  return False


T = int(input())
for _ in range(T):
  n,m = map(int,input().split())
  if check(n,m):
    print("Yes")
  else:
    print("No")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot的启动原理?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot的启动原理&#xff1f;】面试题。希望对大家有帮助&#xff1b; SpringBoot的启动原理&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…

从零开始搭建向量数据库:基于 Xinference 和 Milvus 的文本搜索实践

引言 在 AI 和大数据时代&#xff0c;向量数据库正成为处理非结构化数据&#xff08;如文本、图像&#xff09;的利器。最近&#xff0c;我尝试用 Xinference 和 Milvus 搭建一个简单的文本搜索系统&#xff0c;从读取本地文本文件到实现交互式查询和高亮显示匹配结果&#xf…

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据&#xff0c;只需要实现少量的代码&#xff0c;就能够快速的抓取。 新建项目 (scrapy startproject xxx)&#xff1a;新建一个新的…

docker模拟Dos_SYN Flood拒绝服务攻击 (Ubuntu20.04)

目录 ✅ 一、实验环境准备&#xff08;3 个终端&#xff09; &#x1f449; 所以最终推荐做法&#xff1a; 2️⃣ 配置 seed-attacker 为攻击者&#xff0c;开启 telnet 服务&#xff1a; 3️⃣ 配置 victim-10.9.0.5 为受害者服务器&#xff0c;开启 telnet 客户端并监听&…

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面&#xff0c;结合PyCATIA库实现CATIA V5的自动化操作&#xff0c;提供两大核心功能&#xff1a; ​空几何体清理&#xff1a;智能识别并删除零件文档中的无内容几何体&#xff08;Bodies&#xff09;​空几何图形集清理&#xff1…

Spring 声明式事务应该怎么学?

1、引言 Spring 的声明式事务极大地方便了日常的事务相关代码编写&#xff0c;它的设计如此巧妙&#xff0c;以至于在使用中几乎感觉不到它的存在&#xff0c;只需要优雅地加一个 Transactional 注解&#xff0c;一切就都顺理成章地完成了&#xff01; 毫不夸张地讲&#xff…

从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)

最近我在研究 HarmonyOS 音频开发。在音视频领域&#xff0c;鸿蒙的 AudioKit 框架提供了 AVPlayer 和 AudioRenderer 两种方案。AVPlayer 适合快速实现播放功能&#xff0c;而 AudioRenderer 允许更底层的音频处理&#xff0c;适合定制化需求。本文将以一个开发者的自学视角&a…

支持多系统多协议且可提速的下载工具

在网络下载需求日益多样的当下&#xff0c;一款好用的下载器能极大提升效率。今天就给大家介绍 AB Download Manager&#xff0c;它免费又开源&#xff0c;能适配 Windows 和 Linux 系统&#xff0c;带来超便捷的下载体验。 AB Download Manager 采用先进的多线程技术&#xf…

如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同?

大白话如何在 HTML 中创建一个有序列表和无序列表&#xff0c;它们的语义有何不同&#xff1f; 1. HTML 中有序列表和无序列表的基本概念 在 HTML 里&#xff0c;列表是一种用来组织信息的方式。有序列表就是带有编号的列表&#xff0c;它可以让内容按照一定的顺序呈现&#…

【武汉·4月11日】Parasoft联合光庭信息研讨会|邀您共探AI赋能新机遇

Parasoft联合光庭信息Workshop邀您共探AI赋能新机遇 AI浪潮已至&#xff0c;你准备好了吗&#xff1f; 在智能网联汽车飞速发展的今天&#xff0c;AI技术正以前所未有的速度重塑行业生态。如何把握AI机遇&#xff0c;赋能企业创新&#xff1f; 4月11日&#xff0c;自动化软件…

闻所闻尽:穿透声音的寂静,照见生命的本真

在《楞严经》的梵音缭绕中&#xff0c;"闻所闻尽"四个字如晨钟暮鼓&#xff0c;叩击着每个修行者的心门。这个源自观世音菩萨耳根圆通法门的核心概念&#xff0c;既是佛门修行的次第指引&#xff0c;更蕴含着东方哲学对生命本质的终极叩问。当我们穿越时空的帷幕&…

VLAN综合实验报告

一、实验拓扑 网络拓扑结构包括三台交换机&#xff08;LSW1、LSW2、LSW3&#xff09;、一台路由器&#xff08;AR1&#xff09;以及六台PC&#xff08;PC1-PC6&#xff09;。交换机之间通过Trunk链路相连&#xff0c;交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…

Midjourney使用教程—2.作品修改

当您已生成第一张Midjourney图像的时候&#xff0c;接下来该做什么&#xff1f;了解我们用于修改图像的工具&#xff01;使用 Midjourney 制作图像后&#xff0c;您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…

3.5 平滑滤波

请注意:笔记内容片面粗浅&#xff0c;请读者批判着阅读&#xff01; 一、引言 平滑空间滤波是数字图像处理中用于降低噪声和模糊细节的核心技术&#xff0c;常用于图像预处理或特定场景下的视觉效果优化。其核心思想是通过邻域像素的加权平均或统计操作&#xff0c;抑制高频噪…

Sympy入门之微积分基本运算

Sympy是一个专注于符号数学计算的数学工具&#xff0c;使得用户可以轻松地进行复杂的符号运算&#xff0c;如求解方程、求导数、积分、级数展开、矩阵运算等。本文&#xff0c;我们将详细讲解Sympy在微积分运算中的应用。 获取方式 pip install -i https://mirrors.tuna.tsin…

Qemu-STM32(十):STM32F103开篇

简介 本系列博客主要描述了STM32F103的qemu模拟器实现&#xff0c;进行该项目的原因有两点: 作者在高铁上&#xff0c;想在STM32F103上验证一个软件框架时&#xff0c;如果此时掏出开发板&#xff0c;然后接一堆的线&#xff0c;旁边的人估计会投来异样的目光&#xff0c;特别…

在 ABAP 开发工具 (ADT-ABAP Development Tools) 中创建ABAP 项目

第一步&#xff1a;安装 SAP NetWeaver 的 ABAP 开发工具 (ADT) 开发工具下载地址&#xff1a;https://tools.hana.ondemand.com/#abap 也可以在SAP Development Tools下载工具页面直接跳转到对应公开课教程页面&#xff0c;按课程步骤下载eclipse解压安装即可&#xff0c;过程…

【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?

文章目录 ⭐前言⭐一、架构设计的本质差异&#x1f31f;1、代码与数据结构的对比&#x1f31f;2、技术栈的灵活性 ⭐二、开发与维护的成本博弈&#x1f31f;1、开发效率的阶段性差异&#x1f31f;2、维护成本的隐形陷阱 ⭐三、部署与扩展的实战策略&#x1f31f;1、部署模式的本…

【鸿蒙开发】Hi3861学习笔记- WIFI应用AP建立网络

00. 目录 文章目录 00. 目录01. LwIP简介02. AP模式简介03. API描述3.1 RegisterWifiEvent3.2 UnRegisterWifiEvent3.3 GetStationList3.4 GetSignalLevel3.5 EnableHotspot3.6 DisableHotspot3.7 SetHotspotConfig3.8 GetHotspotConfig3.9 IsHotspotActive 04. 硬件设计05. 模…

大模型的微调技术(高效微调原理篇)

背景 公司有需求做农业方向的大模型应用以及Agent助手&#xff0c;那么适配农业数据就非常重要。但众所周知&#xff0c;大模型的全量微调对算力资源要求巨大&#xff0c;在现实的限制条件下基本“玩不起”&#xff0c;那么高效微调技术就非常必要。为了更好地对微调技术选型和…