初等数论之算术基本定理
2017-03-05 20:35
211 查看
定理: 每个大于1的正整数n都可以被唯一地表示成素数的乘积; n的分解式n = p1 ^ a1 * p2 ^ a2 * p3 ^ a3 ……* pk ^ ak;其中p1,p2,……pk是素数,p1 < p2 < p3 …… pk;;
性质如下:
1. d(n) = (a1 + 1) * (a2 + 1) * (a3 + 1) *……*(ak + 1) ,为n的正因子的数目;
2.$(n) = (p1 ^(a1 + 1) - 1) / (p1 - 1) * (p2^(a2 + 1) - 1 )/( p2 - 1) * …… * (pk^(ak + 1) - 1)/(pk - 1) 为所有的因子的乘积;
3.gcd(a,b) = p1 ^ min(a1,b1) * p2 ^min(a2,b2) * …… * pk^min(ak,bk);
4.lcm(a,b) = p1^max(a1,b1) * p2 ^max(a2,b2) * …… *pk^max(ak,bk);
5.max(gcd(a,b)) + min(gcd(a,b)) == a + b;
6.n ! 分解素数p 的幂为 [n / p ] + [n / p ^2] + [n / p ^3]…… ,[]为floor运算
nefu 118 n!后面有多少个0
思路: 10是由2 和5 这两个素数构成的,直接判断2的个数和5的个数,两个去最小的就好了;
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main()
{
int Tcase;
scanf("%d",&Tcase);
for(int ii = 1; ii <= Tcase; ii ++)
{
ll n;
scanf("%lld",&n);
ll temp;
int t1 = 0;
temp = 2;
while(n / temp >= 1)
{
t1 += n / temp;
temp *= 2;
}
int t2 = 0;
temp = 5;
while(n / temp >= 1)
{
t2 += n / temp;
temp *= 5;
}
cout << min(t1,t2) << endl;
}
return 0;
}
nefu 119组合素数
题意: 求C(2n,n)中有多少素数p,
思路: C(2n,n) = (2n)! / (n ! * n !),直接各自求出来然后相减一下就好了;
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main()
{
int Tcase;
scanf("%d",&Tcase);
for(int ii = 1; ii <= Tcase; ii ++)
{
int n,p;
scanf("%d%d",&n,&p);
int ans = 0;
ll temp = p;
while(2 * n / temp >= 1)
{
ans += 2 *n / temp;
temp *= p;
}
int t = 0;
temp = p;
while(n / temp >= 1)
{
t += n / temp;
temp *= p;
}
cout <<ans - 2 * t << endl;
}
return 0;
}
性质如下:
1. d(n) = (a1 + 1) * (a2 + 1) * (a3 + 1) *……*(ak + 1) ,为n的正因子的数目;
2.$(n) = (p1 ^(a1 + 1) - 1) / (p1 - 1) * (p2^(a2 + 1) - 1 )/( p2 - 1) * …… * (pk^(ak + 1) - 1)/(pk - 1) 为所有的因子的乘积;
3.gcd(a,b) = p1 ^ min(a1,b1) * p2 ^min(a2,b2) * …… * pk^min(ak,bk);
4.lcm(a,b) = p1^max(a1,b1) * p2 ^max(a2,b2) * …… *pk^max(ak,bk);
5.max(gcd(a,b)) + min(gcd(a,b)) == a + b;
6.n ! 分解素数p 的幂为 [n / p ] + [n / p ^2] + [n / p ^3]…… ,[]为floor运算
nefu 118 n!后面有多少个0
思路: 10是由2 和5 这两个素数构成的,直接判断2的个数和5的个数,两个去最小的就好了;
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main()
{
int Tcase;
scanf("%d",&Tcase);
for(int ii = 1; ii <= Tcase; ii ++)
{
ll n;
scanf("%lld",&n);
ll temp;
int t1 = 0;
temp = 2;
while(n / temp >= 1)
{
t1 += n / temp;
temp *= 2;
}
int t2 = 0;
temp = 5;
while(n / temp >= 1)
{
t2 += n / temp;
temp *= 5;
}
cout << min(t1,t2) << endl;
}
return 0;
}
nefu 119组合素数
题意: 求C(2n,n)中有多少素数p,
思路: C(2n,n) = (2n)! / (n ! * n !),直接各自求出来然后相减一下就好了;
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main()
{
int Tcase;
scanf("%d",&Tcase);
for(int ii = 1; ii <= Tcase; ii ++)
{
int n,p;
scanf("%d%d",&n,&p);
int ans = 0;
ll temp = p;
while(2 * n / temp >= 1)
{
ans += 2 *n / temp;
temp *= p;
}
int t = 0;
temp = p;
while(n / temp >= 1)
{
t += n / temp;
temp *= p;
}
cout <<ans - 2 * t << endl;
}
return 0;
}
n!后面有多少个0
n!后面有多少个0
相关文章推荐
- 初等数论四大基本定理
- 白话数论的基石:算术基本定理
- 【数论】【算术基本定理】[LightOJ1289]LCM from 1 to n
- nefu119 组合素数 算术基本定理的应用
- 数论基本定理及应用(三)
- LightOJ 1341 Aladdin and the Flying Carpet(算术基本定理)
- Uva 11395 - Sigma Function (算术基本定理)
- nefu 118 119(算术基本定理的应用)
- 数论基本定理及应用(四)
- hdu 4196 Remoteland 基本算术定理
- 初等数论四大定理之——费马小定理
- Aladdin and the Flying Carpet(算术基本定理)
- 算术基本定理。。。
- Hdu-1215 七夕节【算术基本定理应用】
- 初等数论四大定理(威尔逊定理,欧拉定理,中国剩余定理,费马小定理)
- 【基本算术定理 && 质因数分解】LightOJ - 1341 Aladdin and the Flying Carpet
- Lightoj1341——Aladdin and the Flying Carpet(算术基本定理)
- NEFU119 组合素数【算术基本定理】
- 算术基本定理(唯一分解定理)
- 分解质因数(算术基本定理)