数论(学习)
Probie Tao
这个作者很懒,什么都没留下…
展开
-
数论1——快速幂(1.0)
快速幂的——>int qpow(int a, int b)//a的 b次幂{ int ans = 1; int base = a; while(b!= 0) { if(b % 2 != 0)//对于 c++ 可以改成 b&1!= 0 (会更快) { ans*=base; } ...原创 2019-04-17 23:24:10 · 205 阅读 · 0 评论 -
数学——技巧——判断阶乘尾部有多少个0
对于n的阶乘, 末尾有多少个0一、朴素做法:朴素做法就是求出n!。然后每次对10去摸, 再除以10。就比如55! = 120;fac = 5!ans = 0;while(1){ if(fac%10 == 0)ans++; else break; fac/=10;}这种做法的弊端是, n不能太大, n太大 n的阶乘无法储存。二、想一下n!阶乘末尾的0取决于什么?对...原创 2019-08-25 15:18:38 · 1694 阅读 · 0 评论 -
数论14——中国剩余定理(模板)
int China(int *w,int *m,int n){ int lcm=1,ans=0;for (int i=1;i<=n;i++) lcm*=m[i];//计算所有mod的lcm for (int i=1;i<=n;i++) { int x,y,M=lcm/m[i];exgcd(M,m[i],x,y);// 求用exgcd求M的逆元...原创 2019-08-16 08:52:01 · 113 阅读 · 0 评论 -
数论3——素数筛选——欧拉筛素
#include <bits/stdc++.h>using namespace std;const int maxn = 1e7+5;bool vis[maxn];int pr[maxn/2];int len = 0;void E_prime()// 任何一个数 都可以表示为 N = p1^n1*p2^n2.... 形式, 每次只通过最小的素数因子筛选该数{ ...原创 2019-08-22 08:45:57 · 125 阅读 · 0 评论 -
数论9——分解质因子
来自:https://blog.csdn.net/Asher_S/article/details/81867146void prime_decom(int n, int set<int>&st){ for(int i = 2;i <= n;i++) { while(n!= i) { ...原创 2019-08-18 14:06:47 · 173 阅读 · 0 评论 -
数论6——算数基本定理(唯一分解定理)
算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1a1P2a2P3a3…Pnan,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。最早证明是由欧几里得给出的,现代是由陈述证明。此定理可推广至更一般的交换代数和代数数论。——来自百度百科百度百科讲的很好,任何一个合数都可...原创 2019-09-10 22:05:54 · 799 阅读 · 0 评论 -
数论5——矩阵快速幂(模板)
#include<bits/stdc++.h>#define ll long longusing namespace std;const ll N=10;const ll Mod = 1e9+7;ll tmp[N][N];void mul(ll a[][N],ll b[][N],ll n,ll Mod){ memset(tmp,0,sizeof tmp);...原创 2019-08-31 11:19:55 · 153 阅读 · 0 评论 -
数论12——欧拉——欧拉降幂
欧拉降幂, 广义欧拉降幂ab = ① ab ,b< p ②ab%∮( p )+∮( p ), b >= p原创 2019-09-03 19:52:10 · 134 阅读 · 0 评论 -
数论2——素数筛选——埃氏素筛
筛选小于等于 MAXN的素数bool prime[MAXN];// true 为素数 false 为非素数memset(prime, true, sizeof(prime));prime[0] = priem[1] = false;for(int i = 2;i *i <= MAXN;i++){ if(prime[i]) { for(int j = 2*i;j <...原创 2019-08-15 23:50:11 · 270 阅读 · 0 评论 -
数论10——乘法逆元(模逆元)
其实是乘法模余逆元: a * a^-1 ≡ 1(mod p) 方法一, 扩展欧几里得求逆元:扩展欧几里得,可以求逆元的原因:假设a 与 x互逆(mod p): a * x %p = 1;  ...原创 2019-08-15 20:11:06 · 5256 阅读 · 0 评论 -
朴素+筛法(解决 埃氏筛素 依赖内存的缺点)
埃氏素筛对内存的依赖很大 ,筛选多大的素数就要开多大的数组,该算法对n较大时很有效解bool isprime[MAXN];// 如果氏true 表示下标氏素数int p[MAXN];// 存素数int np;void prime(int n)// 此处 筛选素数{ memset(isprime, true, sizeof isprime); memset(p, 0,...原创 2019-05-17 22:19:39 · 243 阅读 · 0 评论 -
数论7————贝祖(裴蜀)定理
个人理解:对于整数a,b,若存在整数解x,y , 使得ax+by = m,m一定是gcd(a,b)的倍数。——————————————————————————————————————————————————裴蜀定理(或贝祖定理,Bézout's identity)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):...原创 2019-06-15 14:33:05 · 2553 阅读 · 0 评论 -
exgcd(模板)
#include<bits/stdc++.h>using namespace std;int exgcd(int a, int b, int &x, int &y){ if(b == 0) { x = 1; y = 0; return a; } int r = gcd(b, ...原创 2019-08-13 22:17:58 · 176 阅读 · 0 评论 -
数论8——欧几里得和扩展欧几里得(1.0模板)
#include<bits/stdc++.h>using namespace std;int gcd(int a, int b)/******递归******/{ int tmp; if(a < b) { tmp = a; a = b; b = tmp; } return b?gc...原创 2019-08-14 08:47:49 · 124 阅读 · 0 评论 -
数论11——欧拉函数模板
打表求N以内的欧拉函数const int maxn = 1e6;int phi[maxn];void phi_table(int N){ memset(phi, 0, sizeof(phi)); phi[1] = 1; // 1与 1互质所以 1 的欧拉函数值为1 for(int i = 2;i <=N;i++) { if(!phi[i]) { fo...原创 2019-08-15 10:28:35 · 299 阅读 · 0 评论 -
数论4——快速乘(1.0模板)
一、 普通乘法:对于a*n:普通乘法 本质: n个a相加;/*******普通乘法*****/int ans;for(int i = 1;i <= n;i++){ ans+=a;}普通乘法循环n次, 所以时间复杂度为O(n), 如果n特别大, 普通乘法的效率就非常低。二、快速乘:1、我们一步一步的引入快速乘的原理。首先,加入你要算 a*4; 用普通乘法要循环4次每次...原创 2019-08-24 12:55:54 · 367 阅读 · 5 评论 -
LightOJ 1197求大区间的素数个数
https://blog.csdn.net/strangedbly/article/details/50937591#include<bits/stdc++.h>#define ll long longusing namespace std;const ll maxn = 1e6+50;bool vis[maxn];ll pr[maxn];ll len = 0;boo...原创 2019-08-24 15:51:14 · 109 阅读 · 0 评论 -
数论13——组合数学——lucas 算法(模板0.5 )
#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 1e6;ll fac[maxn];void init(ll p)// 求阶乘打表{ fac[0] = 1; for(ll i = 1;i <= p;i++)fac[i] = fac[i-1]*...原创 2019-08-24 18:43:27 · 320 阅读 · 0 评论 -
数论——求a^x ==b(mod p)中的x————bsgs算法(1.0模板)[个人笔记]
bsgs算法:bsgs算法,又称大小步算法。用来解决ax == b(mod c),求x的问题。其中a,b, c是整数, c是质数, 且a不是c的倍数。过程:将x == i*m -j, 其中m = ceil(sqrt©);所以:ai*m-j == b(mod c)就等于ai*m == b * aj(mod)c;因此就可以枚举出j所有可能的结果存入map中;(存法, map<b ...原创 2019-09-14 13:37:19 · 510 阅读 · 0 评论