文章目录
初学数论
学得十分肤浅
判断质数
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 = ∑ i = 1 , p ∣ n m i \sum_{i = 1,p|n}^{m_i} ∑i=1,p∣nmi p i w i p^{w_i}_i piwi
//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);
}
还可以用整数的唯一分解来求
g c d ( a , b ) = ∑ i = 1 m a x ( m a , m b ) p i m i n ( w a i , w b i ) gcd(a,b) = \sum^{max(m_a,m_b)}_{i=1}p_i^{min(w_{ai},w_{bi})} gcd(a,b)=∑i=1max(ma,mb)pimin(wai,wbi)
l c m ( a , b ) = ∑ i = 1 m a x ( m a , m b ) p i m a x ( w a i , w b i ) lcm(a,b) = \sum^{max(m_a,m_b)}_{i=1}p_i^{max(w_{ai},w_{bi})} lcm(a,b)=∑i=1max(ma,mb)pimax(wai,wbi)
a ∗ b = g c d ( a , b ) ∗ l c m ( a , b ) a * b = gcd(a,b) * lcm(a,b) a∗b=gcd(a,b)∗lcm(a,b) 有重要作用
∀ \forall ∀n的约数个数
d(n) = ∏ i = 1 m ( w i + 1 ) \prod_{i=1}^m(w_i+1) ∏i=1m(wi+1)
乘法原理,+1指的指数取0
∀ \forall ∀n的约数之和
s(n) = ∏ i = 1 m ∑ j = 0 w j p i j \prod_{i=1}^m\sum_{j=0}^{w_j}p_i^j ∏i=1m∑j=0wjpij
清晰易懂 不解释
同余
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)
欧拉函数
看看 这位帅哥叫欧拉(滑稽
ϕ ( n ) \phi(n) ϕ(n) 小于n的正整数中与n互质的数的数目
ϕ ( n ) \phi(n) ϕ(n) = n * ∏ i = 1 m ( 1 − 1 p i ) \prod_{i=1}^m(1 - \frac{1}{p_i}) ∏i=1m(1−pi1)
计算 ϕ ( n ) \phi(n) ϕ(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;
}
计算 ϕ ( i ) \phi(i) ϕ(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] * ∏ i = 1 m ( 1 − 1 p i ) \prod_{i=1}^m(1 - \frac{1}{p_i}) ∏i=1m(1−pi1)
费马小定理
若有质数p,gcd(p,a) = 1
则有 a p − 1 a^{p-1} ap−1 ≡ \equiv ≡ 1(mod p)
二次探测定理
x 2 x^2 x2 ≡ \equiv ≡ 1(mod p)
当 p 为奇质数时
x 1 = 1 x_1 = 1 x1=1, x 2 = p − 1 x_2 = p - 1 x2=p−1
威尔逊定理
p 是 质 数 ⇔ ( p − 1 ) ! ≡ − 1 ( m o d p ) p是质数\Leftrightarrow (p - 1)! \equiv -1(mod p) p是质数⇔(p−1)!≡−1(modp)