-----数论-----
stormjing7
这个作者很懒,什么都没留下…
展开
-
素数筛
筛法的思想是去除要求范围内所有的合数,剩下的就是素数了,而任何合数都可以表示为素数的乘积,因此如果已知一个数为素数,则它的倍数都为合数。普通的线性筛法:#include"cstdio"#include"cstring"using namespace std;#define MAX 100000//求MAX范围内的素数long long su[MAX],cnt;bool ispri...原创 2019-03-19 17:28:50 · 178 阅读 · 0 评论 -
51nod1118 机器人走方格 (组合数学模板)
题意: 有一矩形n * m,从左上走到右下有多少种走法分析:首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条路径必须走n+m-2格,只要确定竖直要走的,剩下的就是水平要走的,则答案为费马小定理#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define d(x) cout << (x) <...原创 2019-04-24 22:38:29 · 204 阅读 · 0 评论 -
51nod - 1057 N的阶乘(大数乘法)
题目题意:给你一个数n,求n阶乘,(n < 1e4)分析:用普通类型肯定会爆,我们把结果的数字分段,例如8个一段,用一个整型表示,在求阶乘时,把每一段分别与i相乘,然后模拟进位,最后注意最左边的一段不需要填充0,其他的段要在左边填充0。#include <bits/stdc++.h>#pragma GCC diagnostic error "-std=c++11"#de...原创 2019-04-19 22:01:57 · 171 阅读 · 0 评论 -
素数判定
一、如果求某一范围所有素数,或者所判定素数较小,数组可以开下,就可以用筛选法线性筛#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define d(x) cout << (x) << endl#pragma GCC diagnostic error "-std=c++11"using namespace ...原创 2019-04-23 22:24:33 · 1517 阅读 · 0 评论 -
中国剩余定理
中国剩余定理(限制条件:模为两两互质)中国剩余定理其实很早我们都接触过,在初中甚至小学的时候我们都有可能看到过这样的问题:有n个东西,三个人分剩两个,五个人分剩三个,七个人分剩两个,求n最少是多少。求解这个问题古人就已经想到了很好的解决办法。我们由题意易知:x=2(mod)3;x=3(mod)5;x=2(mod)7;如果x=n1+n2+n3。n1是5,7的倍数,且n1%3=2。n...原创 2019-04-23 19:55:36 · 403 阅读 · 0 评论 -
约瑟夫环问题(递推公式)
基本问题描述:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。(也类似于变态杀人狂问题)通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序号要...原创 2019-04-23 18:06:28 · 3189 阅读 · 0 评论 -
扩展欧几里得算法(推导,逆元)
欧几里得算法欧几里得算法又称为辗转相除法,是为了计算两个数的最大公约数。定理:gcd(a,b)=gcd(b,amod  b)(a>b)gcd(a, b) = gcd(b, a\mod b ) (a> b)gcd(a,b)=gcd(b,amodb)(a>b)证明:假设a>ba &g...原创 2019-04-27 22:02:28 · 1005 阅读 · 0 评论 -
原根详解
什么是a模m的阶?设m>1,gcd(a,m)=1,使得ar≡1(modm)a^{r} \equiv 1 \pmod {m}ar≡1(modm)成立的最小的r,称为a对模m的阶。性质:如果一个数有原根,那么它一共有φ(φ(m))\varphi(\varphi(m))φ(φ(m))个原根。如果p为素数,那么素数p一定存在原根,并且模p的原根的个数为φ(p−1)\varphi(p-1)φ...原创 2019-04-25 22:32:19 · 6693 阅读 · 0 评论 -
欧拉函数总结
什么是欧拉函数欧拉函数是计算小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。计算欧拉函数通式:φ(n)=n∗∏(1−1pi)\varphi(n) = n * \prod (1 - \frac{1}{p_i})φ(n)=n∗∏(1−pi1)即 φ(x) = x * (1-1/p(1)) * (1-1/p(2)) * (1-1/p(3)) (1-1/p(4))...原创 2019-04-25 21:07:48 · 1136 阅读 · 0 评论 -
斯特林公式应用
51nod1058这题让求n的阶乘长度,n范围到1e6,很明显会爆long long,那么就需要一个公式直接算出结果–斯特林公式,这个公式的作用就是求n阶乘的近似值。我们知道求一个十进制数x的位数,log10(x) + 1,用斯特林公式带入x,两边取对数可以看出斯特林公式的作用,上式左边n!会爆,而右边的每一项都不会爆long long,因为取了对数。这样就可以算出位数了。提一下cm...原创 2019-04-21 10:49:46 · 2097 阅读 · 0 评论 -
组合数模板
求组合数我们知道但是组合数大的时候题目一般要求取模,我们知道对于加法,减法,乘法,取模对最后结果是没有影响的,但是对于除法就不能在过程中直接取模,这时候要用到逆元https://blog.csdn.net/xiaoming_p/article/details/79644386把除法转化为乘法在进行运算,这里我们用费马小定理求逆元,下面给出模板#include <bits/stdc...原创 2019-04-01 20:23:18 · 157 阅读 · 1 评论 -
快速幂
首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下:11的二进制是1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,因此,我们将a¹¹转化a1a2a8 ,看出来快的多了吧原来算11次,现在算三次,但是这三项貌似不好求的样子…不急,下面会...原创 2019-04-01 19:48:54 · 174 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies(费马小定理 + 快速幂)
ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies题目有 n 个小朋友, n 个糖果。从 1 号小朋友开始发糖,每次发任意数量(但不少于 1 个)。直到发完,或者没有糖。问最终有多少种发糖方式。(n < 10100000,mod=1e9+7)10^{100000}, mod = 1e9 + 7)10100000,mod=1e9+7)分析首先这就是个整数划分...原创 2019-08-22 21:02:43 · 201 阅读 · 0 评论