约数定理(约数个数定理,约束和定理)
来源:互联网 发布:轻网站源码 编辑:程序博客网 时间:2024/05/21 08:42
约数个数定理:
对于一个大于1正整数n可以分解质因数:
则n的正约数的个数就是。
其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。
定理简证:
首先同上,n可以分解质因数:n=p1^a1×p2^a2×p3^a3*…*pk^ak,
由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2......p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个......pk^ak的约数有(ak+1)个。
故根据乘法原理:n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1)。
例题:
例题:正整数378000共有多少个正约数?
解:将378000分解质因数378000=2^4×3^3×5^3×7^1
由约数个数定理可知378000共有正约数(4+1)×(3+1)×(3+1)×(1+1)=160个。
约数和定理:
对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
则由约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个,
那么n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)个正约数的和为
f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)
定理证明:
证明:若n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
可知p1^a1的约数有:p1^0, p1^1, p1^2......p1^a1
…
同理可知,pk^ak的约数有:pk^0, pk^1, pk^2......pk^ak ;
实际上n的约数是在p1^a1、p2^a2、...、pk^ak每一个的约数中分别挑一个相乘得来,
可知共有(a₁+1)(a₂+1)(a₃+1)…(ak+1)种挑法,即约数的个数。
由乘法原理可知它们的和为
f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)
例题:
例题:正整数360的所有正约数的和是多少?
解:将360分解质因数可得
360=2^3*3^2*5^1
由约数和定理可知,360所有正约数的和为
(2^0+2^1+2^2+2^3)×(3^0+3^1+3^2)×(5^0+5^1)=(1+2+4+8)(1+3+9)(1+5)=15×13×6=1170
可知360的约数有1、2、3、4、5、6、8、9、10、12、15、18、
20、24、30、36、40、45、60、72、90、120、180、360;则它们的和为
1+2+3+4+5+6+8+9+10+12+15+18+20+24+30+36+40+45+60+72+90+120+180+360=1170
所有因子个数τ(n)与所有因子的和σ(n)都是乘(积)性函数。
定义1:因子和函数σ定义为整数n的所有正因子之和,记为σ(n)。
定义2:因子个数函数τ定义为正整数n的所有正因子个数,记为τ(n)。
定理1:设p是一个素数,a是一个正整数,那么
σ(n)=1+p+p^2+……+p^a=【p^(a+1)-1】/(p-1)
τ(n)=a+1
定理2:设正整数n有素因子分解 n =(p1^α1)*(p2^α2)*(p3^α3)* ....... *(pk^αk),那么
σ(n)=【(p1^α1)-1】/(p1-1) * 【(p2^α2)-1】/(p2-1) * ..... *【(pk^αk)-1】/(pk-1)
τ(n)=(α1+1)*(α2+1)*(α3+1)*......*(αk+1)
求因子个数:int prime[maxn],nprime; int vis[maxn]; void getprime(){ nprime = 0; memset(vis,0,sizeof(vis)); for(int i = 2; i <= 450; i++){ int t = 450/i; for(int j = 2; j <=t; j++) vis[i*j] = 1; } for(int i = 2; i <= 450; i++){ if(!vis[i]) prime[nprime++] = i; }} int factor_count(int n){ int ans = 1,sum; int k = sqrt(n*1.0); for(int i = 0; prime[i] < k; i++){ if(n % prime[i] == 0){ sum = 0; while(n % prime[i] == 0){ sum++; n /= prime[i]; } ans *= (a+1); } } if(n > 1) ans *= 2; return ans; }
求因子和:
int prime[maxn],nprime;int vis[maxn];void getprime(){ nprime = 0; memset(vis,0,sizeof(vis)); for(int i = 2; i <= 450; i++){ int t = 450/i; for(int j = 2; j <=t; j++) vis[i*j] = 1; } for(int i = 2; i <= 450; i++){ if(!vis[i]) prime[nprime++] = i; }}int pow_mod(int a,int n,int MOD){ int ans = 1; while(n){ if(n&1) ans = (ans*a)%MOD; n >>= 1; a = (a*a)%MOD; } return ans;}int factor_sum(int n){ int ans = 1,sum; int k = sqrt(n*1.0); for(int i = 0; prime[i] < k; i++){ if(n % prime[i] == 0){ sum = 0; while(n%prime[i] == 0){ sum++; n /= prime[i]; } ans *= (pow_mod(prime[i],sum+1,MOD)-1)/(prime[i]-1); } } if(n > 1) ans *= ans(n*n-1)/(n-1); return ans;}
0 0
- 约数定理(约数个数定理,约束和定理)
- 约数个数定理 和 约数和定理
- 约数个数定理and约数和定理
- 约数个数定理
- 约数个数定理
- 约数个数定理
- poj1845Sumdiv+约数和定理
- 约数和定理
- 数论 约数定理 约数和定理 欧拉定理
- 约数个数定理(hihoCoder144周)
- HDU6069-Counting Divisors(约数个数定理)
- hdu6069Counting Divisors(约数个数定理)
- 约数个数定理及实现
- hdu 1492 约数个数定理
- HDU 6069 Counting Divisors (约数个数定理)
- HDU 6069 Counting Divisors【约数个数定理】
- 哦,是约数定理
- 关于约数定理
- 股票都去哪儿了
- poj 2506 Tiling
- HBase基础知识(1):CRUD操作之put方法
- MongoDB MapReduce
- ZYBO官方实验遇到的一些问题
- 约数定理(约数个数定理,约束和定理)
- 运行不息的内核线程kthread
- Ubuntu学习之".deb"和".rpm"文件
- hdu1051 Wooden Sticks
- HDU 1286:找新朋友【欧拉函数】
- 从头到尾彻底理解KMP(2014年8月22日版)
- 嵌入式Linux网络编程 之 多线程聊天
- Android下SQLite数据库学习笔记1——SQLite数据库的使用
- 解决nginx负载均衡的session共享问题