
数学知识
文章平均质量分 63
Brightess
毕业于湖南城市学院
目前在某游戏大厂搬砖(
展开
-
Codeforces Round #822 (Div. 2) C Removing Smallest Multiples(复杂度为调和级数级别的暴力)
复杂度为调和级数级别的暴力原创 2022-09-24 15:23:11 · 525 阅读 · 0 评论 -
HDU 2176 取(m堆)石子游戏(Nim博弈+位运算)
Problem Descriptionm堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,10先取者胜,先取者第1次取时可以从有8个的那一堆取走7个剩下1个,也可以从有9个的中那一堆取走9个剩下0个,也可以从有10个的中那一堆取走7个剩下3个.Input输入有多组.每组第1行是m,m<=200000. 后面m个非零正整数.m=0退出.Output先取者负输出No.先取者胜输出Yes,然后输出先取者第1次取子的所有方原创 2021-10-14 20:34:34 · 347 阅读 · 0 评论 -
CodeForce 148A Insomnia cure(筛法)
«One dragon. Two dragon. Three dragon», — the princess was counting. She had trouble falling asleep, and she got bored of counting lambs when she was nine.However, just counting dragons was boring as well, so she entertained herself at best she could. Ton原创 2021-10-26 09:00:00 · 246 阅读 · 0 评论 -
2021第十七届HNCPC(更新中)
A 1157 12强赛Description这次世预赛咱们再次打进了12强,12支队伍分为两个小组,各6支队伍,每个小组进行主客场双循环比赛,赢一场积3分,平一场积1分,输则积0分。现在我们来写一个简单的程序,根据一个小组所有比赛的结果,输出各队的积分、净胜球总数、进球总数。一个队的净胜球为该队总进球数减去总失球数。Input第一行一个整数t,表示有t组测试数据。将小组的 6 个国家编号为 A~F 6 个字母,每组数据15行,为小组的两两主客场比赛。每行为空格隔开的两个大写字母与四个整数,表示原创 2022-01-19 21:33:44 · 2525 阅读 · 0 评论 -
筛素数总结
//一 朴素筛法O(nlogn)#include<iostream>using namespace std;const int N = 1e6+10;int primes[N],cnt;//primes存所有素数,cnt是素数个数bool st[N];//置为false的是素数,置为true的是非素数void get_primes(int n){ for(int i=2;i<=n;i++) { if(!st[i]) primes[cnt++]=原创 2022-01-25 10:42:14 · 340 阅读 · 0 评论 -
AcWing 873. 欧拉函数(欧拉函数总结)
什么是互质?(最大公因子是1)判断是否互质。(根据最大公因子是1)什么是欧拉函数?欧拉函数的公式是?(公式由容斥原理推导而来)举个例子:(如6的欧拉函数是2,因为1~6之中,首尾的1和6都包括,与6互质的元素个数只有1和5两个)欧拉函数的证明:运用容斥原理。链接: 欧拉函数-数论-C++(详细)算法的瓶颈主要在分解质因数上,分解质因数的时间复杂度为O(sqrt(a)),但由于有n组数据,所以时间复杂度为O(sqrt(a)*n)由欧拉函数的公式我们可以知道关键是分解质因子p,我们不关心质原创 2022-01-25 12:23:07 · 919 阅读 · 0 评论 -
AcWing 874. 筛法求欧拉函数(线性筛法求欧拉函数模板)
给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。输入格式共一行,包含一个整数 n。输出格式共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。数据范围1≤n≤10^6输入样例:6输出样例:12注意:利用欧拉函数对1~n中每个数进行求解,并将结果累加,这显然不合理,对某个数 ai 进行一次欧拉函数求解需要O(sqrt(ai)),n次则需要O(n*sqrt(ai)),题目给出n的范围是1e6,显然会TLE。考虑用线性筛法求欧拉函数 O(n)线性筛法传送通道:筛素数总结原创 2022-01-25 15:00:37 · 618 阅读 · 0 评论 -
分享:欧拉定理及其证明
转自 [欧拉函数、筛法求欧拉函数、欧拉定理]转载 2022-01-25 15:17:11 · 375 阅读 · 0 评论 -
快速幂、光速幂 模板
快速幂:快速求a^b % p的问题,时间复杂度:O(logb),若对于n组数据,那么时间复杂度为O(nlogb)一.如果用暴力解法 O(nb)会TLE基本思路:对于 n 组数据,分别循环b次求出a^b mod p二.快速幂解法 O(nlogb)(n组数据,每组logb,b表示几次幂)基本思路:1.预处理出 a(20),a(21),a(22),…,a(2logb) 这b个数2.将 a^b 用 a(20),a(21),a(22),…,a(2logb) 这b种数来组合,即组合成:ab=a(2^x1转载 2022-01-25 18:49:28 · 523 阅读 · 0 评论 -
AcWing 876. 快速幂、扩展欧几里得 求逆元(乘法逆元,费马小定理)
ps:“a整除b” 或 “b能被a整除” 或 “a|b”:b叫做a的倍数,a叫做b的约数(或因数)。即:b%a==0,b是被除数,a是除数。乘法逆元定义:若 整数b,m互质,且对于 任意的整数a,如果满足b|a(即b能整除a,a%b==0),则存在一个整数x,使得:a/b≡a*x(mod m)(即(a/b) mod m = a*x)则称 x 为 b的模m 乘法逆元,记为:b^(-1)(mod m)。(联想一下:除b等于乘b的负一次方)费马小定理:a ^ (p-1) ≡ 1 (mod p原创 2022-01-25 21:23:51 · 1512 阅读 · 4 评论 -
AcWing 877. 扩展欧几里得算法(递归,裴蜀定理,gcd)
给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)。输入格式第一行包含整数 n。接下来 n 行,每行包含两个整数 ai,bi。输出格式输出共 n 行,对于每组 ai,bi,求出一组满足条件的 xi,yi,每组结果占一行。本题答案不唯一,输出任意满足条件的 xi,yi 均可。数据范围1≤n≤10^5,1≤ai,bi≤2×10^9输入样例:24 68 18输出样例:-1 1-2 1一.拓展欧几里得算法时间复原创 2022-01-26 10:21:45 · 861 阅读 · 0 评论 -
AcWing 878. 线性同余方程(扩欧)
给定 n 组数据 ai,bi,mi,对于每组数求出一个 xi,使其满足 ai × xi ≡ bi (mod mi),如果无解则输出 impossible。输入格式第一行包含整数 n。接下来 n 行,每行包含一组数据 ai,bi,mi。输出格式输出共 n 行,每组数据输出一个整数表示一个满足条件的 xi,如果无解则输出 impossible。每组数据结果占一行,结果可能不唯一,输出任意一个满足条件的结果均可。输出答案必须在 int 范围之内。数据范围1≤n≤10^5,1≤ai,bi,mi≤原创 2022-01-26 12:08:34 · 436 阅读 · 0 评论 -
AcWing 885. 求组合数 I(递推)
求组合数有很多种题型,我们需要**根据输入的数据的范围来选哪种方式**,主要是**询问次数和数据大小的不同**,对应了不同的解法,此外,另有高精度组合数和卡特兰数两种特例.组合数模板一:**O(n^2)** 组合式朴素公式:![QQ图片202201271原创 2022-01-30 23:35:53 · 1192 阅读 · 0 评论 -
AcWing 886. 求组合数 II(预处理+优化的O(n)版本)
组合数模板二:O(a*log(mod))(a–组合数下界,mod–模数)来自数论的常识与组合数I不同的是,上一题是预处理所有c[a][b]的值,这一题是预处理中间的一步由那么 (b!)^(−1) 与 ((a−b)!)^(−1) 该如何求呢?答案:利用之前学过的利用快速幂求逆元推导:快速幂求逆元** 时间复杂度:O(a∗log(mod))**(对滴,求逆元的时候快速幂的时间复杂度是log mod,此时mod-2就是几次幂)//关键在预处理//关键在预处理#include&..原创 2022-01-30 23:43:03 · 829 阅读 · 0 评论 -
AcWing 887. 求组合数 III(Lucas定理+优化版)
组合数模板三:O(plog{2,n}),本题还要在此基础上乘最多20组测试数据前置知识:组合数基本定义解决核心:卢卡斯定理时间复杂度:问题:所以对于本题来说,n<=1e18(组合数下界),则logn ≈ 60(以2为底),时间复杂度为60*1e5 = 6e6,但是由于有最多20组询问,因此最终算出来是1.2e8,虽然一秒内无法算出,但是可能题目设置的数据不是很强,所以能过。写法一是比视频中更为优化的写法。一个要注意的点:写法一:更优美的写法其实优化之处就是在于把原本每次..原创 2022-01-30 23:56:10 · 1248 阅读 · 0 评论 -
AcWing 889. 满足条件的01序列(卡特兰组合数,快速幂/扩欧/优化版预处理求逆元)
给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。输出的答案对 10^9+7 取模。输入格式共一行,包含整数 n。输出格式共一行,包含一个整数,表示答案。数据范围1≤n≤10^5输入样例:3输出样例:5转载了一位良心大大的文章,写的太好了,代码是自己写的一个改良版本。转自AcWing 889. 满足条件的01序列。1.案例三个0,三个1如果要求满足题目转载 2022-02-02 20:12:40 · 339 阅读 · 1 评论 -
AcWing 883. 高斯消元解线性方程组(高斯消元模板)
先出裸的模板:#include<bits/stdc++.h>using namespace std;const int N = 110;typedef double db;db a[N][N];const db eps = 1e-8;int n;int gauss(){ int c,r; for(c=0,r=0;c<n;++c)///////////////////////////// {原创 2022-02-02 21:17:41 · 863 阅读 · 0 评论 -
AcWing 884. 高斯消元解异或线性方程组(高斯消元变种)
输入一个包含 n 个方程 n 个未知数的异或线性方程组。方程组中的系数和常数为 0 或 1,每个未知数的取值也为 0 或 1。求解这个方程组。异或线性方程组示例如下:M[1][1]x[1] ^ M[1][2]x[2] ^ … ^ M[1][n]x[n] = B[1]M[2][1]x[1] ^ M[2][2]x[2] ^ … ^ M[2][n]x[n] = B[2]…M[n][1]x[1] ^ M[n][2]x[2] ^ … ^ M[n][n]x[n] = B[n]其中 ^ 表示异或(XOR)原创 2022-02-02 21:21:52 · 196 阅读 · 0 评论 -
AcWing 196. 质数距离(二次筛法模板 线筛)
题意:给定两个整数l和u,在闭区间[l,u]内找到距离最接近的两个相邻质数c1和c2(即c2-c1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。同时,你还需要找到距离最远的两个相邻质数d1和d2(即d1-d2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。如果没有满足条件的,则输出“There are no adjacent primes.”算法:二次筛法本题给出的区间范围给定的最大值是2^31-1 ≈ 2e9(超过了1e8),而线性筛法求的是[1,n]中的所有质数,因..原创 2022-02-09 13:46:05 · 722 阅读 · 0 评论 -
AcWing 1293. 夏洛克和他的女友(二分图染色 思维 线性筛)
夏洛克有了一个新女友(这太不像他了!)。情人节到了,他想送给女友一些珠宝当做礼物。他买了 n 件珠宝,第 i 件的价值是 i+1,也就是说,珠宝的价值分别为 2,3,…,n+1。华生挑战夏洛克,让他给这些珠宝染色,使得一件珠宝的价格是另一件珠宝的价格的质因子时,两件珠宝的颜色不同。并且,华生要求他使用的颜色数尽可能少。请帮助夏洛克完成这个简单的任务。输入格式只有一行一个整数 n,表示珠宝件数。输出格式第一行一个整数 k,表示所使用的颜色数;第二行 n 个整数,表示第 1 到第 n 件珠宝原创 2022-02-09 15:42:45 · 429 阅读 · 0 评论 -
AcWing 197. 阶乘分解(线筛 阶乘分解质因子)
给定整数 N,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pi 和 ci 即可。输入格式一个整数 N。输出格式N! 分解质因数后的结果,共若干行,每行一对 pi,ci,表示含有 pi^ci 项。按照 pi 从小到大的顺序输出。数据范围3≤N≤10^6输入样例:5输出样例:2 33 15 1样例解释5!=120=2^3∗3∗5题意:任给一个整数n,让我们将n!分解质因数。将每个质因子及其对应的次数求出。(n<=1e6)本题思路:(两步骤)时间原创 2022-02-09 18:56:27 · 967 阅读 · 0 评论 -
AcWing 1289. 序列的第k个数(快速幂 等差、等比数列的性质)
BSNY 在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列。现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第 k 项的值吗。如果第 k 项的值太大,对其取模 200907。输入格式第一行一个整数 T,表示有 T 组测试数据;对于每组测试数据,输入前三项 a,b,c,然后输入 k。输出格式对于每组数据,输出第 k 项取模 200907 的值。数据范围1≤T≤100,1≤a≤b≤c≤10^9,1≤k≤10^9输入样例:21 2原创 2022-02-09 20:02:04 · 512 阅读 · 0 评论 -
AcWing 1290. 越狱(容斥原理求补集 快速幂)
监狱有连续编号为 1 到 n 的 n 个房间,每个房间关押一个犯人。有 m 种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。求有多少种状态可能发生越狱。输入格式共一行,包含两个整数 m 和 n。输出格式可能越狱的状态数,对 100003 取余。数据范围1≤m≤10^8,1≤n≤10^12输入样例:2 3输出样例:6样例解释所有可能的 6 种状态为:(000)(001)(011)(100)(110)(111)。如果高中学过排列组合的话,本题转载 2022-02-09 23:01:19 · 213 阅读 · 0 评论 -
AcWing 1291. 轻拍牛头(反向求约数个数)
今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏.贝茜让 N 头奶牛(编号 1 到 N)坐成一个圈。除了 1 号与 N 号奶牛外,i 号奶牛与 i−1 号和 i+1 号奶牛相邻,N 号奶牛与 1 号奶牛相邻。农夫约翰用很多纸条装满了一个桶,每一张纸条中包含一个 1 到 1000000 之间的数字。接着每一头奶牛 i 从桶中取出一张纸条,纸条上的数字用 Ai 表示。所有奶牛都选取完毕后,每头奶牛轮流走上一圈,当走到一头奶牛身旁时,如果自己手中的数字能够被该奶牛手中的数字整除,则拍打该牛的头转载 2022-02-10 14:39:59 · 279 阅读 · 0 评论 -
AcWing 1294. 樱花(推公式 阶乘分解运用 约数个数)
故可以利用 AcWing 197. 阶乘分解 的模型了。#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 1e6 + 10, mod = 1e9 + 7;int n;bool st[N];int primes[N], cnt;void init(int n) { for (int i=2; i<=n; ++i) { if.原创 2022-02-10 15:11:56 · 441 阅读 · 0 评论 -
AcWing 1075. 数字转换(约数之和 + 树形dp 求树的最长路径运用)
题意:如果一个数 x 的 约数之和 y(不包括他本身)比他本身 小,那么 x 和 y 可以 互相转换给定一个正整数 n,求出正整数 [1,n] 集合中:在不出现重复数字的情况下,能进行的最大变换步数思路:1、如果一个数 x 的约数之和 y(不包括他本身)比他本身小,则 x 与 y 连一条边,问题转化为求树的最长路径问题2、由于任意正整数 x,的 约数之和 是 唯一的,且本题要求只有约数之和 小于 自身才能转换,故对于所有的 x 来说,他向 小于 自己的数转换的边 至多 只有一条,那就是 x 的..原创 2022-03-24 17:07:59 · 822 阅读 · 0 评论 -
2022牛客寒假1 牛牛做数论(找规律)
#include<bits/stdc++.h>using namespace std;const int N = 110;bool st[N];int primes[N];int cnt;int n;typedef vector<int> vi;#define pb push_back#define pp pop_backvi pre_pro;bool jud(int x){ if(x<2) return false; for(int原创 2022-04-29 11:27:00 · 380 阅读 · 0 评论 -
2022牛客寒假1 中位数切分(推结论 or 线段树优化dp + 前缀和)
题意:给定一个 长为 n 的数组 a 和 一个整数 m,你需要将其 切成连续的若干段,使得 每一段的中位数 都 大于等于 m,求 最多可以划分成多少段。思路:这是一道十分有趣的题目,预期的简单解法 O(n) ,复杂解法 O(nlogn) 。一、简单解法:记 数列中 ≥ m 的数字 有 cnt1 个,< m 的数字 有 cnt2 个,则 答案为 cnt1 - cnt2,该值 ≤ 0 时输出 -1证明一(严谨):记 f(l, r) 为 原数组中 a[l],...,a[r] 一段中的元...原创 2022-04-29 22:45:28 · 716 阅读 · 2 评论 -
2022牛客寒假1 牛牛看云(哈希)
注意到 n ≤ 1e6 而 a[i] ≤ 1000,可以看到 a[i] 范围很小,或者说极限数据下会有大量重复的值出现,我们想想怎么利用这一点:记 cnt[] 表示i出现的次数,枚举 (i, j) 对(共 1e6 种)。不同情况直接相乘,特殊处理相同情况。#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 1e6+10, M = 1010;int n;int a[N];..原创 2022-04-30 21:54:00 · 283 阅读 · 0 评论 -
2022牛客寒假1 B站与各唱各的(逆元 概率 期望)
题意:表示 有 n 个人,m 句歌词。每个人可以 选择每句歌词唱不唱,不能与他人沟通。若某句歌词被所有人唱了,或者所有人都没唱,那么这句是失败的,否则是成功的。每个人都十分聪明,求 唱成功的句的期望取模 1e9 + 7思路:首先注意到 句子与句子之间没有办法互相影响(相互独立),因此 答案 是 一句话的期望值 乘以 m,由于无法交流,且如果每一个人都唱 “最优方案”,反而 最后一句话都唱不成,所以 最优方案就应该是:每个人 随机以 pi 的概率唱。决定 唱或不唱 这一句,由于 n 个人...原创 2022-05-02 19:44:28 · 309 阅读 · 0 评论 -
2022牛客寒假2 小沙的长路(数学规律题 欧拉回路 一笔画问题)
题意:在一张 包含 n 个点 的 完全图 中,自定义其中任意数量的边的方向,所有边的权重都是 1,要求算出 经过 n 个点,且 每条边只能经过 1 次 的 最短路径 min 和 最长路径 max。思路:观察数据范围,我们发现只能运用 O(logn) 或者 O(1) 的算法,然而前者不方便实现,因此我们考虑用 O(1) 的算法,显然需要找规律。当 n = 1 时,图上只有 1 个点,显然有 min = max = 0;当 n = 2时,图上只有 2 个点,则 min = max = 1;当 n..原创 2022-05-03 23:57:13 · 401 阅读 · 2 评论 -
2022牛客寒假2 小沙的数数(数学规律题 异或运算)
题意:任意一个长度为 n 的 a 数组,其总和 a[ + ] 为 m,问有多少中不同的 a 数组,使得其总异或和a[ ]最大?思路:代码:#include<bits/stdc++.h>using namespace std;#define int long longconst int mod = 1e9+7;inline int lowbit(int x) { return x & (-x); }signed main(){ int n, m; c..原创 2022-05-04 17:08:13 · 543 阅读 · 0 评论 -
2022牛客寒假2 小沙的算数(并查集解法 乘法逆元)
#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 2e6+10, mod = 1e9+7;int n, q;char op[N];int num[N];int pro[N];int p[N];int Find(int x){ if(p[x]!=x) p[x] = Find(p[x]); return p[x];}int qm...原创 2022-05-05 11:17:49 · 724 阅读 · 0 评论 -
Codeforces Round #791 (Div. 2) A - AvtoBus(暴力 贪心 数学)
题目来源A AvtoBus点此进入题面题意:给定一个数 n,如果它能被 m 个 4 或 6 组合而成,输出 m 的最小值和最大值。如果不能被若干 4 或 6 组成,输出 -1。思路:首先,当 n 为奇数 或 n 小于 4 的时候,显然是不能被 4 和 6 组合而成的,这需要进行特判。具体思路见代码注释。代码:#define _CRT_SECURE_NO_WARNINGS 1#pragma GCC optimize("Ofast")#pragma GCC optimize("inli原创 2022-05-18 17:02:54 · 179 阅读 · 0 评论 -
Codeforces Round #793 (Div. 2) B - AND Sorting
题目来源B AND Sorting点此进入题面题意:给出一个排列,给定一个数 X ,每次操作只能交换 i & j = X 两个位置 的数字,问:X 最大为多少,能通过这种操作 让序列变得有序。思路:如果一个数 p[i] ≠ i,那么一定要交换,所以必须有 X & p[i] = X。令 Y = 所有不在它原本位置的 p[i] 的按位与,则 X ≤ Y。实际上可以让 X = Y。因为我们可以把 Y 这个数字拿来当中介。如果要交换 p[i],p[j],我们可以先让 p[i] 和 Y原创 2022-05-23 18:20:51 · 232 阅读 · 0 评论 -
二叉树专题--洛谷 P1229 遍历问题(乘法原理 已知前、后序遍历求中序遍历个数)
我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。输出可能的中序遍历序列的总数,结果不超过长整型数。样例输出 #1提示原创 2022-06-28 10:43:31 · 363 阅读 · 0 评论 -
HDU 6287 口算训练(分解质因子 + 二分下标)
分解 a[1] ~ a[n] 各个元素的质因子原创 2022-07-10 12:05:23 · 266 阅读 · 0 评论 -
数论整除分块讲解 例题:2021陕西省赛C
整除分块 2021陕西省赛原创 2022-07-22 12:03:17 · 480 阅读 · 0 评论