![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 50
罚时大师月色
努力让更多小白和我一起共同进步
展开
-
AcWing 1217. 垒骰子 简单dp+快速幂
AcWing 1217. 垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。atm想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多原创 2021-03-09 20:07:06 · 210 阅读 · 0 评论 -
AcWing 1226. 包子凑数 背包dp+思维
AcWing 1226. 包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有 N 种蒸笼,其中第 i 种蒸笼恰好能放 Ai 个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买 X 个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有 X 个包子。比如一共有 3 种蒸笼,分别能放 3、4 和 5 个包子。当顾客想买 11 个包子时,大叔就会选 2 笼 3 个的再加 1 笼 5 个的(也可能选出 1 笼 3 个的再加 2 笼 4 个的)。当然有时包子大原创 2021-03-08 00:37:27 · 153 阅读 · 0 评论 -
AcWing 1303. 斐波那契前 n 项和 快速幂+矩阵乘法
AcWing 1303. 斐波那契前 n 项和大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2。现在问题很简单,输入 n 和 m,求 fn 的前 n 项和 Snmodm。输入格式共一行,包含两个整数 n 和 m。输出格式输出前 n 项和 Snmodm 的值。数据范围1≤n≤2000000000,1≤m≤1000000010输入样例:5 1000输出样例:12这道题我本来想用简单的暴力解决问题,但是我发现测试样例很大,我知原创 2021-03-07 23:39:00 · 1315 阅读 · 2 评论 -
AcWing 1225. 正则问题
AcWing 1225. 正则问题考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式。小明想求出这个正则表达式能接受的最长字符串的长度。例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。输入格式一个由x()|组成的正则表达式。输出格式输出所给正则表达式能接受的最长字符串的长度。数据范围输入长度不超过100,保证合法。输入样例:((xx|xxx)x|(x|xx))xx 输出样例:6做这道题,我们首先要明白什么叫正则表原创 2021-03-06 20:05:52 · 169 阅读 · 1 评论 -
Acwing 1301. C 循环 扩展欧几里得算法
Acwing 1301. C 循环对于 C 语言的循环语句,形如:for (variable = A; variable != B; variable += C)statement;请问在 k 位存储系统中循环几次才会结束。若在有限次内结束,则输出循环次数。否则输出死循环。输入格式多组数据,每组数据一行四个整数 A,B,C,k。读入以 0 0 0 0 结束。输出格式若在有限次内结束,则输出循环次数。否则输出 FOREVER。数据范围1≤k≤32,0≤A,B,C<2k输入样原创 2021-03-06 19:15:14 · 244 阅读 · 0 评论 -
AcWing 1223. 最大比例 指数的最大公约数
AcWing 1223. 最大比例 X星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54,其等比值为:3/2。现在,我们随机调查了一些获奖者的奖金数。请你据此推算可能的最大的等比值。输入格式第一行为数字 N ,表示接下的一行包含 N 个正整数。第二行 N 个正整数 Xi,用空格分开,每个整数表示调查到的某人的奖金数额。输出格式一个形如 A/B 的分数,要求 A原创 2021-03-06 18:40:08 · 712 阅读 · 0 评论 -
AcWing 1295. X的因子链 理解
AcWing 1295. X的因子链 输入正整数 X,求 X 的大于 1 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。输入格式输入包含多组数据,每组数据占一行,包含一个正整数表示 X。输出格式对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。每个结果占一行。数据范围1≤X≤220输入样例:23410100输出样例:1 11 12 12 24 6这道题其实我刚开始一直没有理解明白,后来仔细看了y总的原创 2021-03-05 18:10:40 · 2000 阅读 · 4 评论 -
AcWing 1246. 等差数列 最大公约数
AcWing 1246. 等差数列数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN 并不一定是按等差数列中的顺序给出)输出格式输出一个整数表示答案。数据范围2≤N≤100000,0≤Ai≤109输入样例:52 6 4 10 20输出样例:10原创 2021-03-04 23:59:07 · 1145 阅读 · 3 评论 -
AcWing 1211. 蚂蚁感冒 两种简单的做法
AcWing 1211. 蚂蚁感冒长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。输入格式第一行输入一个整数 n, 表示蚂蚁的总数。接着的一行是 n 个用空格分开的整数 Xi, Xi 的绝对值表示蚂蚁离开杆子左边端点的距离原创 2021-02-26 15:01:03 · 143 阅读 · 0 评论 -
AcWing 130. 火车进出栈问题
AcWing 130. 火车进出栈问题一列火车n节车厢,依次编号为1,2,3,…,n。每节车厢有两种运动方式,进栈与出栈,问n节车厢出栈的可能排列方式有多少种。输入格式输入一个整数n,代表火车的车厢数。输出格式输出一个整数s表示n节车厢出栈的可能排列方式数量。数据范围1≤n≤60000输入样例:3输出样例:5首先我们把入栈叫做’+’,出栈叫做’-’,然后我们开始分析。一共有这五种情况。+++−−−321+++--- 321+++−−−321+−+−+−123+ - +-原创 2021-02-25 20:55:27 · 281 阅读 · 0 评论 -
AcWing 3195. 有趣的数 组合数问题
AcWing 3195. 有趣的数我们把一个数称为有趣的,当且仅当:它的数字只包含 0,1,2,3,且这四个数字都出现过至少一次。所有的 0 都出现在所有的 1 之前,而所有的 2 都出现在所有的 3 之前。最高位数字不为 0。因此,符合我们定义的最小的有趣的数是 2013。除此以外,4 位的有趣的数还有两个:2031 和 2301。请计算恰好有 n 位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以 109+7 的余数。输入格式输入只有一行,包括恰好一个正整数 n。输出格式原创 2021-02-25 10:08:18 · 144 阅读 · 1 评论 -
AcWing 890. 能被整除的数
AcWing 890. 能被整除的数来自大佬的博文ttps://img-blog.csdnimg.cn/20210221211724332.png)这是一道典型的容斥问题,凡是个数为奇数的就系数为正,然后偶数为负y总的视频讲的很清楚首先我们想办法把n个数的的倍数求出来求出他们的个数,然后进行一个容斥运算,为什么要用二进制呢,因为1到2m-1是0位到m-1位的0,1的全排列。所以我们引用这部分的知识#include<iostream>using namespace std;c原创 2021-02-21 21:23:42 · 1111 阅读 · 4 评论 -
Acwing 889. 满足条件的01序列 (卡特兰数)
Acwing 889. 满足条件的01序列所以结果是y总说它叫卡特兰数只要求Cn2n/n+1就可so easy代码如下#include<iostream>using namespace std;typedef long long LL;const int mod=1e9+7;int quick_pow(int a,int k,int p){ int res=1; while(k) { if(k&1) res=(LL)r原创 2021-02-21 19:47:54 · 235 阅读 · 1 评论 -
AcWing 888. 求组合数 IV(高精度算法)
AcWing 888. 求组合数 IV输入a,b,求Cba的值。注意结果可能很大,需要使用高精度计算。输入格式共一行,包含两个整数a和b。输出格式共一行,输出Cba的值。数据范围1≤b≤a≤5000输入样例:5 3输出样例:10这道题用到了高精度运算,可以参考一下我的以前的博文,我们不是简简单单的相乘就可以了,这样时间复杂度会达到o(n2根2)级别这样不是很好,y总是先求结果的质因数,然后逐步乘以质因数,这个思路还是非常非常很好的,我们求a!的质因数的方法也不是简简单单的试除法原创 2021-02-21 16:49:29 · 382 阅读 · 0 评论 -
AcWing 887. 求组合数 III(卢卡斯定理)
求组合数 III这很明显也是一个数论题,你要是不知道结论的话,很难做出来这道题的,首先我们引入一个结论。不过有些细节还是要靠代码实现,从这篇文章转载过来的一个证明图。不过证明过程很复杂,我们只需要记住一个式子就可以了最细节的还是代码实现过程。代码如下#include<iostream>using namespace std;typedef long long LL;int p;int quick_pow(int a,int k,int p){ in原创 2021-02-21 15:36:44 · 196 阅读 · 0 评论 -
AcWing 886. 求组合数 II(乘法逆元)
求组合数这道题和上一篇很像,但是这道题的数据范围也变大了,那我们该怎么求呢,我们要求i(1-N)的 i! 和 i!-1然后根据Cba=a!/(b!*(a-b)!)这样求就会可以很方便的求组合数了,时间复杂度是N(log2N)因为求快速幂的时间复杂度是log2N级别的,输出结果是o(1)的然后我们怎么求 i!,这个很简单,类似于递归的方式调用前一个数组,但是难点是怎么求 i!-1呢,我们还是要用到一个定理。b是底数,m是模,如果b,m互质b-1等于bm-2%m这是类似于费马小定理的递推。然后思原创 2021-02-21 14:21:50 · 253 阅读 · 0 评论 -
AcWing 885. 求组合数 I(dp)
Acwing 885给定n组询问,每组询问给定两个整数a,b,请你输出Cba mod (109+7)的值。输入格式第一行包含整数n。接下来n行,每行包含一组a和b。输出格式共n行,每行输出一个询问的解。数据范围1≤n≤10000,1≤b≤a≤2000输入样例:33 15 32 2输出样例:3101这道题我刚开始想到用阶乘去解决。Cba=a!/(b!*!(a-b))然后小数是可以算出来的,但是mod的问题没解决好,时间复杂度也比较高,这个类似于筛法。用了一个简单原创 2021-02-21 11:18:47 · 136 阅读 · 0 评论 -
AcWing 884. 高斯消元解异或线性方程组
题目链接这道题和高斯消元其实很像,但是异或消元要比加减法消元容易一点,因为首先系数只有0或1,然后很容易异或,因为1^1=0,1^0=1,0^1=1,0^0=0.上一次高斯消元的博文然后主要思路还是形成“倒”金字塔,然后从后往前求解。#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int N=110;int a[N][N];in原创 2021-02-21 10:16:02 · 131 阅读 · 0 评论 -
AcWing 883. 高斯消元解线性方程组
Acwing题目入口题目:输入一个包含n个方程n个未知数的线性方程组。方程组中的系数为实数。求解这个方程组。下图为一个包含m个方程n个未知数的线性方程组示例:输入格式第一行包含整数n。接下来n行,每行包含n+1个实数,表示一个方程的n个系数以及等号右侧的常数。输出格式如果给定线性方程组存在唯一解,则输出共n行,其中第i行输出第i个未知数的解,结果保留两位小数。如果给定线性方程组存在无数解,则输出“Infinite group solutions”。如果给定线性方程组无解,则输出“N原创 2021-02-21 09:08:04 · 243 阅读 · 0 评论 -
AcWing 204. 表达整数的奇怪方式
这道题我第一眼居然想着用二分法做,结果,还是不满足二分条件。WA代码如下#include<iostream>using namespace std;const int N=30;int a[N],m[N];int n;bool check(int x){ for(int i=1;i<=n;i++) { if(x%a[i]!=m[i]) return false; } return true;}.原创 2021-02-20 21:10:39 · 2037 阅读 · 6 评论 -
AcWing 878. 线性同余方程
仅看这道题的话,我觉得还是不是很容易看出思路来的,y总把这个式子拆分,拆分成了aixi-yim=bI;这个再进行一个转换。aixI+yim=bi这与扩展欧几里得算法就很像了。如果有解的话,那么bi一定是a,m的倍数。扩展欧几里得也是这么说的,然后思路就来了。会扩展欧几里得的话这道题就很简单啦最后的x应该等于 如果有解,b/gcd(a,m)*x1%m;#include<iostream>using namespace std;int exgcd(int a,int b.原创 2021-02-20 19:22:20 · 135 阅读 · 1 评论 -
AcWing 877. 扩展欧几里得算法
这是一道数论题,我们应该怎么做呢,我们还是要推一个结论带′'′的都是由辗转相除法得到的x1,y1。然后原函数x,y分别等于x=y1,y=x1-a/b*y1;这一点很关键,我们要先求那个x1,y1然后再改变x,y.y总代码尽管很强,但是不是很好理解。我写了一个比较好理解的扩展欧几里得算法代码#include<iostream>using namespace std;int exgcd(int a,int b,int &x,int &y){ if(!.原创 2021-02-20 18:13:50 · 185 阅读 · 0 评论 -
AcWing 876. 快速幂求逆元
https://www.acwing.com/problem/content/878/输入样例:34 38 56 3输出样例:12impossible刚开始看题意没看懂啥意思,我第一次以为求aaap-2,但是看测试样例不太对,然后我看了y总的视频,果然是干货满满的y总没让我失望。https://www.acwing.com/video/301/还用到了费马小定理 ap-1=1%p;p为质数。y总说求的是aaap-2%modmodmod我一下子明白了测试样例的理由,其实这道原创 2021-02-20 11:50:41 · 263 阅读 · 0 评论 -
AcWing 874. 筛法求欧拉函数
https://www.acwing.com/problem/content/description/876/这道题并不简单,你要会用欧拉筛去筛欧拉数。说说思路。首先和欧拉筛质数一样,先把质数筛出来,质数的欧拉数为本身减1,因为质数与前面的数都互质。然后用质数去更新下一个数,筛除合数的同时,去更新合数的欧拉数,其中有几个特殊的地方。#include<iostream>using namespace std;const int N=1e6+10;int prime[N],c原创 2021-02-20 11:11:13 · 156 阅读 · 1 评论 -
AcWing 871. 约数之和
https://www.acwing.com/problem/content/description/873/这道题我觉得非常需要写一篇博文了,这道题尽管看起来像一个简简单单的求约数之和问题,其实有一个式子我们确实不知道,数论确实包含了我们不知道的定理。比如说p是质因数,a是质因数的个数,把他写成了一个等比数列,可能这样是正确的吧。总之,证明过程我可能不会,这个公式,我们需要记住他。然后理解了公式,代码其实真的不难,除了模运算有点东西,其他的都很简单。#include<iostrea原创 2021-02-19 21:36:47 · 242 阅读 · 1 评论 -
AcWing 870. 约数个数
这道题不难,但是值得我去写的原因在于,一个数约数的个数等于其质因数的个数+1的总乘积p1表示质因数,a表示质因数的个数,最后,约数的个数等于代码也很简单,用到了hash函数#include<iostream>#include<map>#include<algorithm>using namespace std;const int mod=1e9+7;int n;int main(void){ scanf("%d",&n);.原创 2021-02-19 21:17:10 · 124 阅读 · 2 评论 -
Acwing 868. 筛质数 欧拉筛模板、埃氏筛模板
埃氏筛#include <iostream>#include <algorithm>using namespace std;const int N= 1000010;int primes[N], cnt;bool st[N];void get_primes(int n){ for (int i = 2; i <= n; i ++ ) { if (st[i]) continue; primes[cnt ++原创 2021-02-06 17:43:51 · 344 阅读 · 0 评论