初学数论
学得十分肤浅
判断质数
for(i = 2;i * i <= n;i++) if(n % i == 0) { able = 1; break; }
判断1~n范围内的质数
inline void sieve(int x) { int i,j; prime[1] = 1; for(i = 2;i * i <= x;i++) if(!prime[i]) for(j = i * i;j <= x;j += i) prime[j] = 1; }
然后学的是
整数的唯一分解
对于$\forall$n
可表示为n = $\sum_{i = 1,p|n}^{m_i}$ $p^{w_i}_i$
//factorize for(i = 2;i * i <= n;i++) { if(!vis[i]) { p[++k] = i; while(n % i == 0) n /= i,w[k]++; } } if(n != 1) p[++k] = n,w[k]++;
最小公倍数和最大公约数(gcd&&lcm)
对于$\forall$ a,b$\in$ Z
辗转相除法
inline LL gcd(LL a,LL b) { if(a < b) exchange(a,b); if(b == 0) return a; return gcd(b,a % b); }
还可以用整数的唯一分解来求
$gcd(a,b) = \sum^{max(m_a,m_b)}{i=1}p_i^{min(w{ai},w_{bi})}$
$lcm(a,b) = \sum^{max(m_a,m_b)}{i=1}p_i^{max(w{ai},w_{bi})}$
$a * b = gcd(a,b) * lcm(a,b)$ 有重要作用
$\forall$n的约数个数
d(n) = $\prod_{i=1}^m(w_i+1)$
乘法原理,+1指的指数取0
$\forall$n的约数之和
s(n) = $\prod_{i=1}^m\sum_{j=0}^{w_j}p_i^j$
清晰易懂 不解释
同余
a $\equiv$ b(mod m)
有性质
1: a $\equiv$ b(mod m) $\Rightarrow$ b $\equiv$ a(mod m)
2: a $\equiv$ b(mod m) , b $\equiv$ c(mod m)$\Rightarrow$ a $\equiv$ c(mod m)
3: a $\equiv$ b(mod m) $\Leftrightarrow$ m|(a - b)
4: a $\equiv$ b(mod m) , n|m 那么 a $\equiv$ b(mod n)
欧拉函数
看看 这位帅哥叫欧拉(滑稽
$\phi(n)$ 小于n的正整数中与n互质的数的数目
$\phi(n)$ = n * $\prod_{i=1}^m(1 - \frac{1}{p_i})$
计算$\phi(n)$
inline int phi(int n) { int i,res = n; for(i = 2;i * i <= n;i++) { if(n % i == 0) res = res / i * (i - 1); while(n % i == 0) n /= i; } if(n > 1) res = res / n * (n - 1); return res; }
计算$\phi(i)$(1<=i<=n)
inline void sieve(int n) { phi[1] = 1; int i,j; for(i = 2;i <= n;i++) { if(!vis[i]) { prime[++pn] = i; phi[i] = i - 1; } for(j = 1;j <= pn&&prime[j] * i <= n;j++) { vis[prime[j] * i] = 1; if(i % prime[j] == 0) { phi[i * prime[j]] = phi[i] * prime[j]; //注释1 break; } phi[i * prime[j]] = phi[i] * (prime[j] - 1); /*积性函数f(a*b) = f(a) * f(b)(gcd(a,b) = 1) phi[prime[j] - 1] = prime[j] - 1(prime[j]为质数) */ } } }
注释1:phi[i * prime[j] = n * prime[j] * $\prod_{i=1}^m(1 - \frac{1}{p_i})$
费马小定理
若有质数p,gcd(p,a) = 1
则有 $a^{p-1}$ $\equiv$ 1(mod p)
二次探测定理
$x^2$ $\equiv$ 1(mod p)
当 p 为奇质数时
$x_1 = 1$,$x_2 = p - 1$
威尔逊定理
$p是质数\Leftrightarrow (p - 1)! \equiv -1(mod p)$