数论
数学概念与方法
_Index_
这个作者很懒,什么都没留下…
展开
-
LA 3704 Cellular Automaton(矩阵快速幂)
题目https://vjudge.net/problem/UVALive-3704构造出来矩阵后,发现这是一个循环矩阵,从第二行开始每一行都是上一行向右,所以只需要保留第一行数据,使时间复杂度边为(O^2log k)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int max...原创 2020-04-13 21:19:34 · 108 阅读 · 0 评论 -
UVA 10870 Recurrences (矩阵快速幂)
由于n太大,不能直接递推,需要用矩阵快速幂来解决,时间复杂度为O(d^3logn)举例,d=5的矩阵关系式为:|a1 a2 a3 a4 a5| | f[n-1] | | f[n]| |1 | | ...原创 2020-04-12 23:40:54 · 115 阅读 · 0 评论 -
UVA 10214 Trees in a Wood(欧拉函数)
枚举每列,只要找到g(x,y)=1中的所有y即可。因为1~x中,与x互质的假如有i个,那么[1+x,2x]中也有i个,因为相当于那互质的i个每个加了x,公因数还是11≤y≤x 有phi(x)个x+1≤y≤x 也有phi(x)个2x+1≤y≤x 也有phi(x)个.....kx+1≤y≤b ....直接统计#include<bits...原创 2020-03-14 22:42:54 · 137 阅读 · 0 评论 -
UVA 11440 Help Mr.Tomisu(欧拉公式)
题目:https://vjudge.net/problem/UVA-11440所有素因子都大于M等价于和M!互素,因为和M!互素的数中不包含M中的任何因子。在kn中与n互质的个数如何求:在1~n中与n互质的个数为phi[n],再[n+1,2n]....中的个数与1~n中的个数一样。最后用递推先预处理一遍Phi根据欧拉函数若n是素数 phi(n)=phi(n-1)*(n-1)...原创 2020-03-12 11:28:54 · 89 阅读 · 0 评论 -
中国剩余定理
假若有方程组x=a[i](mod mi) i=0,1,2,... 求出x另M为所有mi的乘积,wi=M/mi,此时,wi是除了mi之外所有m0..mi-1,..mi+1,..mn的乘积,也就是他们的公倍数。另gcd(wi,mi)=1,求出ei=wi*pi.此时的ei是除mi余1的数,所以最后要乘a[i].把所有这样的mi加起来,就可以得到解。如:一个数除3余2,除5余3...原创 2020-01-16 10:37:38 · 147 阅读 · 0 评论 -
乘法逆(扩展欧几里得、欧拉定理)
用扩展欧几里得求解的乘法逆原理:ax=1 mod (n)ax+ny=1如7=1mod(15)7*13-(15*6)=1.13为7的逆元。求解出的x就是a的逆元。实现:#include<bits/stdc++.h>using namespace std;typedef long long ll;void gcd(int a,int b,int &...原创 2020-01-16 09:59:36 · 1079 阅读 · 0 评论 -
蓝桥杯 2019 RSA加密 (快速幂 快速乘 欧拉定理 乘法逆)
RSA 是一种经典的加密算法。它的基本加密过程如下。首先生成两个质数 p,q 令 n=p⋅q 设 d 与(p-1) * (q-1) 互质,则可 找到 e 使得 d⋅e 除 (p−1)⋅(q−1) 的余数为 1.n,d,e 组成了私钥,n,d 组成了公钥。当使用公钥加密一个整数 X 时(小于 n ),计算 C=X^d mod n ,则 C 是加 密后的密文.当收到密文 C 时...原创 2020-01-14 21:59:58 · 2077 阅读 · 2 评论 -
UVA 580 危险的组合(数论—计数原理)
题目链接:https://vjudge.net/problem/UVA-580设答案为f(n),以3个U为分类依据,让i,i+1,i+2成为3个U,这样i前面的可以不需要3个U,但是有一个问题,如果前i-1为U,那么i-1,i,i+1还是可以组成3个U,这样就不符合从第i个开始为至少3个U了,所以我们要剔除掉这种情况,可以强制让i-1为L,这样把i-1前面的可排列数量和i+2后面的可排列数量相...原创 2019-12-26 11:25:03 · 203 阅读 · 0 评论 -
欧拉函数phi(数论)
小于n且与n互素(即两个数最大公约数为1)的整数个数,由唯一分解定理可知,从总数n中减去是p1...pn的倍数的个数即可,此过程用到了容斥定理。容斥定理的证明自己查去..欧拉函数:φ(n)=n(1-1/p1)(1-1/p2)...(1-1/pk)这个函数非常的好用若是针对某一个数n,求他的欧拉函数int main(){ int n; scanf("%d",&n...原创 2019-12-18 20:16:54 · 1340 阅读 · 0 评论 -
计数基础
有重复元素的全排列:有k个元素,其中第i个元素有ni个,求全排列个数。分析:令所有ni之和为n,再设答案为x。首先做全排列,然后把所有元素编号,其中第s种元素编号为1~ns。这样做以后,由于编号后所有元素均不相同,方案总数为n的全排列为n!根据乘法原理 n1!n2!n3!...nk!x=n!求x。可以想成每个ni!为该种排列位置上的不同编号的方案,但是因为实际上都是同一种...原创 2019-12-18 00:21:00 · 186 阅读 · 0 评论 -
UVA 10375 选择与除法(唯一分解定理)
该方法使得最后统一算出结果,不用担心中间过程溢出。#include<bits/stdc++.h>using namespace std;vector<int> primes;int vis[10005];int e[10000];void add_integer(int n,int d);void add_factorial(int n,int d){...原创 2019-12-17 19:57:31 · 111 阅读 · 0 评论 -
UVA 12169 不爽的裁判(模算术)
一看就知道是扩展欧几里得,一用就废..看了看别人的..说下思路吧,x2 = (a * x1 + b) % 10001;x3= (a * x2 + b) % 10001;联立2个式子x3 = (a * (a * x1 + b) % 10001 + b ) % 10001;x3 = (a * (a * x1 + b) + b) % 10001;所以x3+10001k=...原创 2019-12-17 15:53:20 · 115 阅读 · 0 评论 -
UVA 11582 巨大的斐波那契数!
因为数太大一定会溢出,所以找规律,发现最多n²会出现重复。先计算出一个周期里的,所有满足f(a的b次幂)处以n的余数,接下来就是匹配,让a的次幂匹配到这个周期里对应的下标,把含有该下标的除以n的余数输出。注意unsigned long long 不要在while循环里写,不然会栈溢出。此外通过此题,还学会了如何用位运算求a的b次幂。if(b&1){ ...原创 2019-12-17 10:56:57 · 158 阅读 · 0 评论 -
扩展欧几里得算法
首先来看欧几里得的优美写法:int gcd(int a,int b){ return b==0 ? a:gcd(b,a%b);}扩展欧几里得,用来求直线上的点,如求直线ax+by+c=0上有多少个整点(x,y)满足x∈[x1,x2],y∈[y1,y2].首先学习扩展欧几里得,找出一对整数(x,y),使得ax+by=gcd(a,b).注意,这里的x和y不一定为正数。...原创 2019-12-16 20:26:21 · 101 阅读 · 1 评论 -
Eratosthenes筛法找区间无平方因子的数
筛选的思想:对于不超过n的每个数p,删除2p,3p,4p....当处理完所有数后,还没有被删除的数就是素数。比如要筛选区间(n,m)的无平方因子数,对于不超过根号m的所有素数p,筛掉区间(n,m)内p²的所有倍数。首先来找素数,vis[i]表示被删除的数,vis[i]=1表示已经被删除。筛选方法为: int n,m,c=0; scanf("%d %d",&n,...原创 2019-12-16 17:21:38 · 166 阅读 · 0 评论