1.判断素数
1)素数:就是只能被1和自身整除的正整数。注意:0,1不是素数,2是素数。
2)方法:从2开始,逐个将n除以从2到√n之间的每个整数,如果存在能够整除n的数,则n不是素数。如果在2到√n之间找不到能整除n的数,那么n是素数。
int isprime(int p)
{
int i;
if (p <= 1)
return 0;
for (i = 2; i <= sqrt(p); i++)//根号3小于2,会直接跳过循环返回1
{
if (p % i == 0)
return 0;
}
return 1;
}
2.判断完全数
1)完数:该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
int perfect(int number)
{
int i, s = 1;//任意数的因子都有1
for (i = 2; i <= number / 2; i++)
{
if (number % i == 0)
s = s + i;
}
if (s == number)
return 1;
else
return 0;
}
3.求最大公约数和最小公倍数
1)定义:最大公约数指的是两个或多个整数中能够同时整除它们的最大正整数,最小公倍数指的是两个或多个整数中能够被它们同时整除的最小正整数。
2)算法:
(一)最大公约数:辗转相除法求解最大公约数,不断用两个正整数中较小的数去除以较大的数,然后再用余数去除以较小的数,一直重复这个过程,直到余数为0为止。此时,较小的那个数就是两个数的最大公约数。
举个例子,假设我们要求解48和60的最大公约数,可以按照以下步骤进行辗转相除:
- 用60除以48,余数为12。由于余数不为0,所以继续下一步。
- 用48除以12,余数为0。此时,12就是48和60的最大公约数。
(二)最小公倍数
最小公倍数则是两个数字相乘再除以最大公约数
#include <stdio.h>
int main()
{
int m, n, c, r, d;
scanf("%d %d", &m, &n);//这里规定m>n
r = m * n;//之后m,n值会变,先用r储存起来
do
{
c = m % n;
m = n;
n = c;
} while (c != 0);
d = r / m;//最后一次c已经是零了,应该取上一次的余数(c),即最后一次的m
printf("%d %d", m, d);
return 0;
}