题目:完数难题
题目描述如下:
小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 1 的正整数的所有因子之和等于它的本身,则称这个数是完数
比如 6,28 都是完数:6=1+2+3 ; 28=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮帮他
输入输出格式
输入格式
输入包含两个正整数 n1 和 n2 ,表示题目描述中的数据范围。
正整数之间以空格间隔。
输出格式
针对输入,请打印出 n1 和 n2 之间(包括边界)存在的完数个数
-
1.下面是python的做法:
count = 0
n,m=map(int,input("").split())
for i in range(n,m+1):
list = []
for j in range(1,i):
if i % j==0:
list.append(j)
if sum(list) == i :
count+=1
print(count)
运行出来可以得到输入的2个数之间的数有多少个符合完整数要求的数
- 读取用户输入的两个整数n和m,使用map函数将输入的字符串转换为整数。
- 初始化一个名为count的变量,用于记录完全数的数量。
- 使用一个for循环遍历从n到m的所有整数。
- 对于每个整数i,初始化一个名为list的空列表,用于存储i的所有因子。
- 使用另一个for循环遍历从1到i-1的所有整数j,检查j是否是i的因子(即i能被j整除)。如果是,将j添加到list中。
- 如果list中所有元素的和等于i,说明i是一个完全数,将count加1。
- 循环结束后,输出count的值,即在n和m之间的完全数的数量
2.下面是java的做法:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int count = 0;
for (int i = n; i <= m; i++) {
int sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
count++;
}
}
System.out.println(count);
}
}
和上面的同理:运行出来可以得到输入的2个数之间的数有多少个符合完整数要求的数
- 导入Scanner类,用于从控制台读取用户输入。
- 定义一个名为Main的公共类,包含一个main方法,作为程序的入口点。
- 在main方法中,创建一个Scanner对象,用于读取用户输入的两个整数n和m。
- 初始化一个名为count的变量,用于记录完全数的数量。
- 使用一个for循环遍历从n到m的所有整数。
- 对于每个整数i,初始化一个名为sum的变量,用于存储i的所有因子之和。
- 使用另一个for循环遍历从1到i-1的所有整数j,检查j是否是i的因子(即i能被j整除)。如果是,将j添加到sum中。
- 如果sum等于i,说明i是一个完全数,将count加1。
- 循环结束后,输出count的值,即在n和m之间的完全数的数量。
3..下面是c++的做法:
#include <iostream>
#include <vector>
int main() {
int count = 0;
int n, m;
std::cin >> n >> m;
for (int i = n; i <= m; i++) {
std::vector<int> factors;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
factors.push_back(j);
}
}
int sum = 0;
for (int factor : factors) {
sum += factor;
}
if (sum == i) {
count++;
}
}
std::cout << count << std::endl;
return 0;
}
标签:count,java,速通,int,sum,list,整数,c++,main From: https://blog.csdn.net/weixin_49600177/article/details/142593355
- C++代码首先包含了必要的头文件,然后定义了一个名为
main
的函数。- 在
main
函数中,我们首先初始化计数器count
为0,然后从标准输入读取两个整数n
和m
。- 接下来,我们使用一个循环遍历范围[n, m]内的每个整数
i
。对于每个整数i
,我们创建一个名为factors
的向量来存储它的因子。- 然后,我们使用另一个循环遍历1到
i-1
之间的所有整数j
,如果i
可以被j
整除,就将j
添加到factors
向量中。- 接着,我们计算
factors
向量中所有元素的和,并将其与i
进行比较。如果它们的和相等,说明i
是一个完全数,我们将计数器count
加1。- 最后,我们将计数器的值输出到标准输出。