【基础数学】质数,约数,分解质因数,GCD,LCM

时间:2023-03-08 21:58:44
  • 【基础数学】质数,约数,分解质因数,GCD,LCM
  • 1.质数:

  质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数。

  • 2.约数:

  如果一个整数能被两个整数整除,那么这个数就是着两个数的约数。约数是有限的,一般用最大公约数。例如 24的约数是1,2,3,4,6,8,12,24

  • 3.计算约数和:

  在数论中有种,把一个数分解成N个素数的积,再把这些素数的指数加一后,全部相乘的积就是约数的个数了。

  例如:36 = 2^2 * 3^2 指数加一的积就是:(2+1)*(2+1) = 9;36有9个约数吧。
  24 = 2^3 * 3 指数加一的积就是:(3+1)*(1+1) = 8;24就有8个约数。

 int check(int n){
int i,sum = ;
memset(arry,,sizeof(arry));
for(i = ;i <=n;i++){
while(n!=i){
if(n%i == ){
arry[i]++;
n/=i;
}
else
break;
}
}
arry[n]++;
for(int j = ;j <= ;j++){
if(arry[j]){
arry[j]+=;
sum*=arry[j];
}
}
return sum;
}
  • 3.分解质因数:
 void check(int n){
int n1 = n,sum = ;
for(int j = ;j<=sqrt(n);j++){
while(n1 % j == ){
n1 /= j;
cout << j << "\t";
}
}cout << n1;
}
  • 4.GCD(最大公约数)

    两个数:

     scanf("%d%d",&a,&b);
int a1 = a,b1 = b;
if(a < b){
temp = a;
a = b;
b = temp;
}
while(b != ){
temp = a % b;
a = b;
b = temp;
}
printf("%d",a);

    多个数: 

 for(i = ;i<n;i++){
scanf("%d",&arry[i]);
}
//获得最小值
min = arry[];
for(int j = ;j<;j++){
if(arry[j] < min)
min = arry[j];
}
for(a = min;a>;a--){
int sum = ;
for(i = ;i<n;i++){
sum+=arry[i]%a;
}
if(sum == )
break;
}
printf("%d\n",a);
  • 5.LCM(最小公倍数)

    两个数:先计算出A,B的最大公约数C,LCM = A*B/C

    多个数:先求最大公约数,各个数除这个最大公约数所得的各个数,相乘,再乘以这个最大公约数可得这几个数的最小公倍数