蓝桥备战-数学知识

我是开心果,在备战蓝桥的路上,和你一起努力,今天是蓝桥倒计时第10天,预祝大家取得好成绩,并希望自己的努力会产生好的结果。
在这里插入图片描述

一.质数

定义:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
质数筛:快速的将质数筛出来,每个数都会被他的最小质因子筛掉,故外层循环是从2到n。如果这个数没有被筛掉,说明这个数为质数,找完质数了,就要执行下一步了,筛不是质数的数,循环质数,质数的i倍会被筛掉,不能筛多了吧,要不就死循环了,所以要加一个判断,如果这个数除以质数为0了,就证明这个数用完了。

int prime[100010],cnt;
bool st[100010];
int get_prime(int n)
{
	for(int i=2;i<=n;i++)
	{
		if(!st[i])prime[cnt++]=i;
		for(int j=0;prime[j]<=n/i;j++)
		{
			st[i*prime[j]]=true;
			if(i%prime[j]==0)
				break;
		}
	}
}

二.约数

定义:约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
求约数:

vector<int>get_divisors(int x)
{
	vector<int>res;
	for(int i=1;i<=x/i;i++)
	{
		if(x%i==0)
		{
			res.push_back(i);
			if(i!=x/i)res.push_back(x/i);
		}
		sort(res.begin(),res.end());
		return res;
	}
}

最大公约数:__gcd(欧几里得算法)

int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;//看终点,最后肯定面临b等于0,
	//如果b等于0返回a,如果b不等于0,递归,是不是很简单
}

三.欧拉函数

定义:在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目。

void get_eulers(int n)
{
    euler[1] = 1;
    for (int i = 2; i <= n; i ++ )
    {
        if (!st[i])
        {
            primes[cnt ++ ] = i;
            euler[i] = i - 1;
        }
        for (int j = 0; primes[j] <= n / i; j ++ )
        {
            int t = primes[j] * i;
            st[t] = true;
            if (i % primes[j] == 0)
            {
                euler[t] = euler[i] * primes[j];
                break;
            }
            euler[t] = euler[i] * (primes[j] - 1);
        }
    }
}

四.快速幂

定义:快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
如果某个数最后一位是1(二进制哦),那么这个数为奇数,如果是0,那么这个数为偶数。
思路:当这个数大于0时,看看当前这个数是奇数还是偶数,如果为奇数,那么res=res*a%p。

LL qmi(int a,int b,int p)//a的b次方取余p
{
	LL res=1%p;
	while(b)
	{
		if(b&1)res=res*a%p;
		a=a*(LL)a%p;
		b>>=1;
	}
	return res;
}

五.扩展的欧几里得算法

欧几里得算法的定义:欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)
在这里插入图片描述
在这里插入图片描述

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

int exgcd(int a,int b,int &x,int &y)//俩个未知数x,y
{
    if(!b)
    {
        x=1,y=0;
        return a;
    }
    int d=exgcd(b,a%b,y,x);//ay+b(x-a/b*y),a和b隐形的
    y-=a/b*x;
    return d;
}

六.中国剩余定理

定义:孙子定理是中国古代求解一次同余式组(见同余)的方法。是数论中一个重要定理。又称中国余数定理。
跟鸡兔同笼差不多。

七.求组合数​​

计算:
在线性写法中被写作C(n,m)。
组合数的计算公式为
在这里插入图片描述
给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cabmod(109+7) 的值。
性质:
在这里插入图片描述

c[a][b],mod=1e9+7,N=2010;
void init()
{
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<=i;j++)
		{
			if(!j)c[i][j]=1;
			else c[i][j]=c[i-1][j]+c[i-1][j-1]%mod;
		}
	}
}

八.位运算

1.例题:Beast非常喜欢正整数序列,他提出了一个问题。他认为一个正整数是特殊的,如果这个数被可以写成 n的不同非负数幂次之和. 比如说,当 n=4的时候, 17是特殊的, 因为4的0次方+4的2次方等于17,Beast要求你帮助他找到第k个特殊的数字(这些数按升序排序). 因为答案很大,因此需要对10的9次方加7取模。
思路:题目中说这个数可以写成n的不同非负数幂次之和,所以将k表示成二进制的形式,然后计算该二进制下n的不同幂次和。
例如:3 4 ,将4表示为0100,ans=3的平方=9

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const LL mod=1e9+7;
LL qmk(LL a,LL b)//求a的b次方
{
	LL f=1;
	while(b)
	{
		if(b&1)
		{
			f=f*a%mod;
		}
		a=a*a%mod;
		b>>=1;
	}
	return f;
}
void solve()
{
	LL n,k;
	cin>>n>>k;
	LL res=0,cnt=0;//res答案,cnt表示当前是几次幂
	while(k)
	{
		if(k&1)
		res=(res+qmk(n,cnt))%mod;
		cnt++;
		k/=2;
		
	}
	cout<<res<<endl;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

2.lowbit返回倒着数第一个为1的后半部分。

int lowbit(int x)
{
	return x&-x;
}

九.裴属定理

裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
它的一个重要推论是:a,b互质的充分必要条件是存在整数x,y使ax+by=1.
定理:当两个数互质时,不能被凑出来的两个数的最大整数为(p-1)(q-1)-1

对于零基础的同学来说,备战蓝桥杯Python组确实需要系统化的学习计划。下面是一些建议帮助你从入门到具备参赛能力: ### 一、基础知识积累阶段 **1. 学习 Python 编程语言** - **语法基础** - 数据类型(整数、浮点数、字符串等)、运算符及表达式 - 控制结构:条件判断 if...elif...else; 循环 for 和 while;break 和 continue 等控制流关键词 - **函数编写** - 定义与调用自定义函数 - 参数传递机制包括位置参数、默认值参数以及关键字参数的概念 - 函数内部作用域规则理解局部变量和全局变量的区别 - **数据容器操作** - 列表(List):索引访问元素、切片获取片段、增删改查列表项内容的操作方法 - 元祖(Tuple): 只读特性使其适用于某些特定场景下作为不可变序列的数据存储形式之一 - 字典(Dictionary):键值对映射关系建立及其基本查询修改方式 - 集合(Set):无序集合的特点决定了它适合用于去除重复项或者求交集并集差集之类的应用场合 - **文件处理** - 文件打开模式(r,w,a,b,t,x) - 使用 with as 的上下文管理器进行资源自动释放的安全编码习惯养成 - 文本型 vs 二进制型 I/O 流区别对待原则 - **模块导入** - 标准库简介如 os, sys 模块功能介绍 - 第三方包安装 pip 工具的基本运用技巧 **2. 掌握常用算法思想** 掌握常见的排序算法(冒泡法 冒泡排序、插入排序...)查找算法(顺序搜索 折半查找),并且了解其时间复杂度空间复杂度分析框架。 ### 二、刷题实践巩固提高阶段 选择一些在线 OJ 平台开始练习,比如力扣 (LeetCode), 牛客网(NiuKe), 蓝桥云课等等,通过大量做历届真题加深印象,并学会总结归纳相似类型的解题套路模板。注意: - 记录错题反思原因避免下次再犯错误; - 尽量尝试多种解决方案对比效率差异之处所在; - 向优秀的选手请教思路开阔眼界增长见识。 最后提醒一点就是保持良好心态,毕竟准备比赛是一个长期过程,遇到困难不要轻易放弃。只要坚持不懈地按照上述步骤努力下去,相信你在比赛中一定能取得理想成绩!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值