![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 59
舍舍发抖
路漫漫其修远兮
展开
-
数论-威尔逊定理
威尔逊定理概念: p可整除(p-1)!+1是p为质数的充要条件证明:1.充分性:如果p不是素数,当p = 4时,显然(p - 1) !≡ 6 ≡ 2 (mod p),当p > 4时,若p不是完全平方数,则存在两个不等的因数a,b使得a * b = p,则(p - 1) !≡ n * a * b ≡ 0 (mod p);若p是完全平方数即p = k ^ 2,因为p > 4,所以k > 2,k ,2 * k < p,(p - 1) !≡ n (k * 2 * k)原创 2021-10-11 17:04:33 · 311 阅读 · 0 评论 -
P3951 小凯的疑惑(exgcd+数论推导)
题目链接首先说这个题用到了 赛瓦维斯特定理已知a,b为大于1的正整数,gcd(a,b)=1,则使不定方程 ax+by=k 无负整数解的无法构成的最大整数 k=ab−a−b下面说明能更好理解式子,需要结合题目这么理解:设小凯必须拿 a 和 b 中的一个,那么它们不能构成的数就是 a*b (因为 ab = a 个 b,或者 b 个 a,在 a,b互质的情况下,ab只能由其中一个数来表示 ),所以当 a 和 b >= 1时,满足无法构成的最大数为 ab 。所以 a-1 和 b-1 >= 0原创 2021-10-09 21:53:08 · 1412 阅读 · 1 评论 -
拓展欧几里得定理的应用
扩展欧几里得定理的运用首先,先重复一下拓展欧几里得的内容:对于不全为 0 的整数a、b,一定存在一组解 x,y,使得 ax + by == gcd(a,b)先说一下这个定理的三个用处(但是小细节点和式子的变形式功能下面再说)1.求解不定方程2.求解线性同余方程3.求解模的逆元1.求解表达式 = 特解 + 通解已知有:ax + by = gcdax/gcd + by/gcd = 1acx/gcd + bxy/gcd = c设 X = xc/gcd Y = yc/gcd就有了 aX原创 2021-10-09 00:50:41 · 229 阅读 · 0 评论 -
UVA11582 巨大的斐波那契数!
今天发一道有关数论的思维题(卡精度很严的题)输入样例:31 1 22 3 100018446744073709551615 18446744073709551615 1000输出样例:121250提示:找规律,看精度。洛谷的题目,但是需要注册绑定UVA网站的账号,注册账号可以看这个博客...原创 2021-10-04 23:10:57 · 147 阅读 · 0 评论 -
数论-质因数分解(最基础方法)
质因数分解的最简单方法(最好理解的方法)对于整数 m,其质因数分解过程如下步骤:(1)生成 2~sqrt(m) 内的所有质数的质数表。(线性筛)(小于m的质数会存储在 prime[] 数组中,知道作用即可,改日分享)(2)对于质数 pi,若m%pi = 0,while 循环执行,数组记录因子,记录因子个数加一,m = m/pi,反复执行1该步骤,直到 m%pi != 0。(3)若 m = 1,则质因数分解结束。代码实现:#include<stdio.h>int a[10001原创 2021-10-03 01:44:28 · 2057 阅读 · 0 评论 -
数论-详解快速幂
快速幂算法一步一步优化1.什么是快速幂算法例题引入A^B^ 的最后三位数表示的整数为?正常求法long long normalPower(long long base,long long power){ long long result = 1; for(int i = 1;i <= power;i++) { result = result*base; } return result%M;}//T = O(n) 取决于power ,但这里会出现问题,数据会溢出原创 2021-10-02 00:05:12 · 346 阅读 · 1 评论 -
数论-拓展中国剩余定理
这个算法需要看懂中国剩余定理会更好理解一点,求解思路是相同的,但方法不同拓展中国剩余定理:上面的定理是求 n 个数互质的情况,但题目有时候并不能保证 n 个数互质,这里就需要拓展中国剩余定理,虽然说和中国剩余完全不同,但是还是叫了这个名字。这个定理有两种推导方式,这里就介绍一种思想的一种方法。采用两两合并同余方程后取模的方法注意:互质的定义:两个正整数只有一个公因数1时,它们的关系叫做互质,如3和11互质首先列出正常的通式:x = a1(mod m1)x = a2(mod m2)…………原创 2021-09-29 23:26:09 · 177 阅读 · 0 评论 -
数论-大数阶乘
大数阶乘为了考虑精度问题,所以大数阶乘需要一个算法首先来看,100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000所以一个 64位的 long long 型,数据存不下,所以需要考虑新的思路,利用数组来存储位数。考虑,一个位数上原创 2021-09-28 23:41:18 · 372 阅读 · 0 评论 -
数论-逆元
逆元1.什么是逆元?对于正整数 a 和 m,如果有ax = 1(mod m),那么方程中的 x 最小正整数解叫做模的逆元。2.为什么需要逆元当求解公式:(a/b)%m 时,因b可能会过小,会出现爆精度的情况,所以需变除法为乘法,然后乘法取模进行缩小数据范围。设c是b的逆元,则有b*c≡1(mod m);则( a/b )%m = ( a/b )1%m = ( a/b)bc%m = ac( mod m);即 a/b 的模等于 a*b 的逆元的模,所以就是为找出这个逆元;3.现在来看一个逆元最常见原创 2021-09-26 20:23:55 · 851 阅读 · 0 评论 -
数论-乘法逆元【裴蜀定理+欧拉定理/费马小定理】
裴蜀定理定义:若a,b是整数,且gcd(a,b)= d,那么对于任意的整数x,y,ax+by 都一定是 d 的倍数,特别地,一定存在整数x,y,使 ax+by = d 成立。(根据拓展欧几里得定理得出 ax + by = gcd(a,b))这篇博客提到拓展欧几里的公式及推到一个重要推论是:a,b互质的充要条件是存在整数x,y使 ax+by = 1证明这里就不详细说了,参考博客:https://blog.csdn.net/leader_one/article/details/75298966推论原创 2021-09-24 23:37:32 · 738 阅读 · 0 评论 -
数论-欧拉定理及延伸
欧拉函数首先,没有欧拉函数是没有欧拉定理滴。对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目( φ(1) = 1 )。它称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。因为 8 = 222。φ(8) = 8*(1-1/2) = 4。如何求欧拉函数?p 与 x 互为质因数。当 x= 1 时,φ(1)=1当 x 为质数时,φ(x) = x-1否则,通式的实质是将 大于1的数是 x 公约数的数全部筛掉了。在欧拉原创 2021-09-23 22:21:26 · 454 阅读 · 0 评论 -
EOJ 4329 数论+精度问题(长记性)
做到一题卡精度比较严的题,一直以为是思路问题,最后发现是精度卡的比较死,题目不难。一个长记性的题,当考虑到精度问题时候,一定要考虑到底,不然思路正确,精度无法通过,就是 0。因为 a,b,n <= 109,所以两者只要相乘必须取模,减小精度,这点必须考虑。还有就是再次理解了 ksm 算法的含义,ksm 中的 a 值更替的目的是在 p 为奇数时,a 的值可以以某一个 2 的倍数形式乘上 res,达到在 2 的倍数范围内的一些次幂值的计算#include<stdio.h> //htt.原创 2021-09-11 12:05:40 · 130 阅读 · 0 评论 -
hdu Dream(6440)(小费马定理)
这个题目的理解就是很不nice,大概意思就是让你重新定义一个 加法 和 乘法 ,使得满足 (m+n)p = mp + np 。根据小费马定理有:np (mod p) = n然后有:(m+n)p (mod p) = (m+n) (mod p)也有:mp + np = m (mod p) + n (mod p)然后二者就相等,重新定义的加法就是 m (mod p) +n(mod p) ,乘法就是 (m+n) (mod p)#include<stdio.h>int main(){...原创 2021-09-07 18:33:05 · 171 阅读 · 0 评论 -
hdu Find Integer (6441)(大费马定理)
题目大意为,给你 a,n 的值,让你找出是否有 b,c 满足方程 an + bn = cn ,典型的定理内容。long long型一一寻找即可:#include<stdio.h>int main(){ int t; scanf("%d",&t); while(t--) { long long n; int a; scanf("%lld %d",&n,&a); if(n > 2){ printf("-1 -1\n");conti..原创 2021-09-07 18:14:38 · 104 阅读 · 0 评论 -
数论-费马定理及延伸
费马小定理:当 p 为质数,a为自然数时,且 a < p(当 a > p 时,需要先取模运算) ,有:ap-1 = 1 (mod p)ap = a (mod p)例:331 (mod 7) = ? —》 36*5*3 —》 36(mod 7) == 1 —》 331 = 32925 (mod 11) = ? —》 (29 mod 11)25 (mod 11) —》 725 (mod 11) —》 722*7 —》 2925 = 7费马原创 2021-09-06 22:03:04 · 340 阅读 · 0 评论 -
数论-中国剩余定理(模数互质的同余方程组)
求同余方程组(中国剩余定理)在《孙子兵法》中有一这样问题:“今有物不知其数,三三数之剩二(除以3余2),五五剩值三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题解法称为中国剩余定理。具体分三步:1.找出三个数:3和5公倍数中找出被7除余1的最小数为15,从3和7的公倍数中找出被5除余1的最小数为21,最后从5和7的公倍数中找出除3余1的最小数70。2.用15乘2(得到30的是除7余2的最终结果),用21乘3(得到的63是除5余2的最终结果),用70乘2(140原创 2021-08-10 00:02:37 · 1588 阅读 · 0 评论 -
数论-取模
取模问题一、取模运算二、复数取模一、取模运算1.取模加减乘除法(a + b)%M = (a%M + b%M)%M(a - b)%M = (a%M - b%M + M )%M (a%M - B%M 后的值一定小于M)(a * b)%M = (a%M)*(b%M)%M下面两种方法都用到了取模加减乘乘除运算,才能有下面两种方法的快速运算2.快速幂260 >= long longtypedef long long ll;ksm(ll a,ll p){ ll res = 1.原创 2021-08-07 12:48:27 · 1073 阅读 · 0 评论 -
杭电 7007 净化(圈数遍历、思维)
这道题我感觉是一道模板题,以后肯定会碰到类似解法的题目。题目要找每圈的一个固定值,而且还要特判第一圈刚加上来的值。从这两方面考虑的话,寻找第一圈的最大值,但并不限于第一行。根据题意,如果满足,那么在前两行一定会出现最大值。让 m 减去最大值之后,表示除去第一次走的,剩下的圈数每回的起点就是最大值之后的点,终点在下一行的最大值点。(如果最大值等于走一圈的的值,那么就等同于多减了一圈,所有的圈数的起点相同,第一行可能前半部分 < 0 舍去)这里还需要特判,我只说一种情况的理解:在第二行增量为 ..原创 2021-08-06 11:48:07 · 71 阅读 · 0 评论 -
数论-素数筛
一般单个筛选素数O(nloglogn)int prime(int a){ for(int i = 1;i <= a/i;i++) { if(a%i == 0) return i; } return a;}埃式筛:用于一连串的素数筛选int prime(int a){ bool prime[100001] = {false}; for(int i = 2;i <= n;i++) { if(!prime[i]) { printf("%d\n",i)原创 2021-07-31 22:26:42 · 117 阅读 · 0 评论