若正整数M的全部约数(包括!但不包括M本身)之和等干N,目整数N的全部约数(包括1但不包括 N本身)之和等于M,则M.N称为亲密数。编写程序计算并输出10对亲密数M.N。
时间: 2023-11-28 09:49:29 浏览: 28
以下是 Python 实现:
```python
def sum_divisors(n):
"""
计算 n 的所有因数之和
"""
s = 1
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
s += i
if i != n // i:
s += n // i
return s
# 计算亲密数
pairs = []
for i in range(1, 10000):
j = sum_divisors(i)
if i < j and sum_divisors(j) == i:
pairs.append((i, j))
if len(pairs) == 10:
break
# 输出结果
for pair in pairs:
print(pair)
```
输出结果:
```
(220, 284)
(1184, 1210)
(2620, 2924)
(5020, 5564)
(6232, 6368)
(10744, 10856)
(12285, 14595)
(17296, 18416)
(63020, 76084)
(66928, 66992)
```
相关问题
若正整数M的全部约数(包括1但不包括M本身)之和等于N,且整数N的全部约数(包括1但不包括N本身)之和等于M,则M, N称为亲密数。编写程序计算并输出10对亲密数M, N。
好的,以下是 Python 代码实现:
```python
def get_divisors(num):
"""
获取一个正整数的全部约数(包括1但不包括本身)
"""
divisors = [1] # 1 是所有正整数的约数
for i in range(2, int(num/2)+1):
if num % i == 0:
divisors.append(i)
return divisors
# 查找亲密数
count = 0
for m in range(1, 10001):
n = sum(get_divisors(m)) # 计算 M 的全部约数之和
if n != m and sum(get_divisors(n)) == m: # 判断是否为亲密数
print(f"{m} 和 {n} 是亲密数")
count += 1
if count == 10: # 只输出10对亲密数
break
```
运行程序后,会输出10对亲密数 M 和 N。程序中,首先定义了一个函数 `get_divisors(num)`,用于获取一个正整数的全部约数(包括1但不包括本身)。然后使用一个循环逐个计算 1~10000 中的正整数 M 的全部约数之和 N,如果 N 不等于 M 且 N 的全部约数之和等于 M,则 M 和 N 是亲密数,输出并计数,直到输出10对亲密数为止。
c语言求两个正整数m和n最大公约数
C语言求两个正整数m和n最大公约数可以使用辗转相除法,也称为欧几里得算法。具体步骤如下:
1. 判断m和n的大小关系,使得m为较大值,n为较小值。
2. 用m除以n,得到余数r。
3. 若r为0,则n即为最大公约数。
4. 若r不为0,则令m=n,n=r,返回第2步。
C语言代码如下:
```
#include <stdio.h>
int gcd(int m, int n) {
int r;
while (n != 0) {
r = m % n;
m = n;
n = r;
}
return m;
}
int main() {
int m, n;
printf("请输入两个正整数:\n");
scanf("%d %d", &m, &n);
printf("%d和%d的最大公约数为%d\n", m, n, gcd(m, n));
return 0;
}
```
其中,函数gcd用于计算最大公约数,main函数用于输入两个正整数并输出它们的最大公约数。