数论——唯一分解定理

算术基本定理(唯一分解定理)

一句话: 
     
任何大于1的自然数,都可以唯一分解成有限个质数的乘积

例如对于大于1的自然数n, 
来自维基百科 
这里Pii均为质数,其指数aii是正整数。 
这样的分解称为的标准分解式


唯一分解定理具有: 
 ①唯一性(分配方式的唯一性) 
 ②存在性    


证明:

百度百科+自己胡搞了+自己以前做的笔记

①唯一性 
  首先明确一个事实,若p是ab的约数(p|ab,p可以整除ab),则p不是a的约数,就是b的约数。 
  如果p是a的约数则证毕。如果p不是a的约数,则p和a的最大公约数为1。 
  则由裴蜀定理推得,因为使a,b互质的充要条件是存在整数x,y使ax+by=1。 
  于是b=b(ma+np) =abm+bnp(……); 
  因为先前已经知道p是ab的约数,则上式右边两项都可以被p整除。 
  所以p就是b的约数。 
  唯一性得证。 
   
②存在性 
  假设n为不能被分为质数的乘积的自然数之一,切n为最小 
  因为设n为大于1的合数(如果n为质数,则只有n=n,显然这是质数的乘积) 
  因为每个合数都可以分为两个大于1小于它的两自然数的乘积 
  所以n=a×b 
  又因为n为不能被分为质数的乘积的自然数中最小的一个 
  所以a和b可以分为质数的乘积 
  所以n已就可以分为质数的乘积,与假设不符合,故假设错误 
  存在性得证。 


定理应用:

(1)一个大于1的正整数N,如果它的标准分解式为:  

,那么它的正因数个数为                      

(2) 它的全体正因数之和为

  

当  

时就称N为完全数。 是否存在奇完全数,是一个至今未解决之猜想。

(3) 利用算术基本定理可以重新定义整数a和b的最大公因子 gcd(a,b)

最小公倍数 lcm(a,b), 并证明

 a*b=gcd(a,b) * lcm(a,b) 

(原来这里直接用的结论,现在知道如何证明的了,证明见下)

(4)此外还可证明根号2是无理数等等。

(5)证明素数个数无限。 


证明(3):(用唯一分解定理)

  现在我们来看下下下面这个式子: 
  已知gcd[最小公约数] (a,b),lcm[最大公倍数] (a,b); 
  a×b=gcd(a,b)×lcm(a,b) 
   
  a=12;b=14 
  gcd(a,b)=2 ; lcm(a,b)=84 ; 
  tot=168 [gcd(a,b)×lcm(a,b)] 
  a×b=12×14=168 
  然后 
  12=3×4 
  14=2×7 
  : 
  : 
  12=2^1×2^1×3^1 
  14=2^1×7^1 
  所以 max=7^1×3^1×=21 
     min=2^1×2^1×2^1=8 
     min×max=168 = gcd(a,b)×lcm(a,b) = a×b 
   
  所以gcd(a,b)×lcm(a,b) = a×b 
   
  证明: 
  设x=gcd(a,b),y=lcm(a,b) 
  则a=m×x,b=n×x,m与n互质 
  故y=m×n*x 
  因此x×y=x×(m×n×x)=(m×x)×(n×x)=a×b 
  即a×b=gcd(a,b)×lcm(a,b)

证明完毕


另加一个用欧拉函数求小于等于n的和n互质的数的数量 
公式:

phi(n) = n(1-1/p1)(1-1/p2)……(1-1/pn)      容斥很爆炸

例如 n=12

12=2^2*3^1

phi(12)=12*(1-1/2)*(1-1/3)=4

与 12 互质的数量是 4个,分别是 1,5,7,11

唯一分解定理,也称为算术基本定理,在数论中是一个非常重要的基础理论。它表明任何一个大于1的整数都可以被唯一地表示成若干个素数的乘积,这种表达形式被称为该整数的标准分解式。 ### 定理内容 对于任意一个正整数 \( n > 1 \),存在唯一的互异质数序列 \( p_1 < p_2 < ... < p_k \) 和对应的指数 \( e_i (i=1,...,k) \),使得: \[n = {p_{1}}^{e_{1}}\times{p_{2}}^{e_{2}}\times...\times{p_{k}}^{e_{k}}\] 其中每个\( p_i \)都是素数,并且这个因子分解的形式是唯一的(如果不考虑各因数之间的顺序)。 在 C++ 中实现求解给定整数的最大公因数、最小公倍数等操作时经常会用到对数字做质因数分解。下面是简单演示如何利用唯一分解定理解题的一个例子——获取某个自然数的所有质因数及其对应幂次: ```cpp #include<iostream> #include<vector> using namespace std; void primeFactorization(int num) { vector<pair<int,int>> factors; // 存储<质因数,次数> for(int i=2;i*i<=num;++i){ int count=0; while(num%i==0){ // 如果可以整除则一直尝试 ++count; num /= i; } if(count>0)factors.push_back(make_pair(i,count)); } if(num!=1)// 这里处理剩余的大于sqrt(n)的单个质因数的情况. factors.push_back(make_pair(num,1)); cout << "Prime Factors and their powers are:\n"; for(auto factor : factors) printf("%d^%d\n",factor.first,factor.second); } int main(){ int number ; cin >>number; primeFactorization(number); } ``` 此程序会读入用户输入的一个非负整数 `number` 并打印出它的所有质因数以及相应的幂值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值