问题描述
给出一个正整数n,求一个和最大的序列a0,a1,a2,……,ap,满足n=a0>a1>a2>……>ap且ai+1是ai的约数,输出a1+a2+……+ap的最大值。
输入格式
输入仅一行,包含一个正整数n
输出格式
一个正整数,表示最大的序列和,即a1+a2+……+ap的最大值
样例输入
10
样例输出
6
import java.util.Scanner;
public class Main{
/*
1.定义了一个名为greatestCommonDivisor的有参函数
这个函数接受一个整数类型的参数x,并返回a
a为定义的整型变量,初始值为1
*/
public static int greatestCommonDivisor(int x){
int a = 1;
for(int i = x-1;i > 0;i--){
if(x % i == 0){//如果x整除的i为0
a = i;//则这个i即为所求的最大公约数a
break;//跳出循环
}
}
return a;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum = 0;
while(n > 1){//不知道循环次数,只知道循环条件
sum = sum + greatestCommonDivisor(n);
n = greatestComonDivisor(n);
}
System.out.println(sum);
}
}
1.用到了Java有参函数
在Java中,函数是一段可以重复使用的代码块,用于执行特定的任务。Java中的函数可以分为有参函数和无参函数两种类型。有参函数接受参数,而无参函数不接受任何参数。
1.1有参函数和无参函数的主要区别
在于它们是否接受参数。有参函数通过参数来接收外部传入的数据,可以根据传入的参数执行不同的操作。而无参函数不接受任何参数,它们通常用于执行固定的操作或返回固定的值。
步骤 | 描述 |
1 | 定义函数的名称和返回类型 |
2 | 根据需要,定义函数的参数列表 |
3 | 在函数体中编写具体的代码 |
4 | 根据需要,返回结果或执行其他操作 |
1.2 无参函数
/*
在这个示例中,我们定义了一个名为first的无参函数。
这个函数的作用是打印"hello small java"。
在main函数中,我们通过first()来调用这个无参函数。
*/
public class Demo1 {
public static void first(){//定义无参函数
System.out.println("hello small java");
}
public static void main(String[] args){//调用无参函数
first();
}
}
1.3 有参函数
/*
在这个示例中,我们定义了一个名为add的有参函数。
这个函数接受两个整数类型的参数num1和num2,并返回它们的和。
在main函数中,我们通过add(10, 20)来调用这个有参函数,
并将返回的结果赋值给sum变量。
*/
public class Demo2 {
public static int add(int num1,int num2){
//定义有参函数
int sum = num1 + num2;
return sum;
}
public static void main(String[] args) {
//调用有参函数
int sum = add(10,20);
System.out.println("sum = :" + sum);
}
}
1.4 总结
有参函数和无参函数是Java中常用的函数类型。有参函数通过参数接受外部传入的数据,可以根据传入的参数执行不同的操作。无参函数不接受任何参数,通常用于执行固定的操作或返回固定的值。通过定义函数的名称、返回类型和参数列表,我们可以轻松地实现有参函数和无参函数。