资源限制
内存限制: 256.0 M B 256.0 MB 256.0MB
C / C + + C/C++ C/C++ 时间限制: 1.0 s 1.0s 1.0s
J a v a Java Java 时间限制: 3.0 s 3.0s 3.0s
P y t h o n Python Python 时间限制: 5.0 s 5.0s 5.0s
问题描述
给出一个正整数 n n n ,求一个和最大的序列 a 0 , a 1 , a 2 , . . . , a p a_0, a_1, a_2, ..., a_p a0,a1,a2,...,ap 满足 n = a 0 > a 1 > a 2 > … … > a p n=a_0>a_1>a_2>……>a_p n=a0>a1>a2>……>ap 且 a i + 1 a_{i+1} ai+1 是 a i a_i ai 的约数,输出 a 1 + a 2 + … … + a p a1+a2+……+ap a1+a2+……+ap 的最大值
输入格式
输入仅一行,包含一个正整数 n n n
输出格式
一个正整数,表示最大的序列和,即 a 1 + a 2 + … … + a p a1+a2+……+ap a1+a2+……+ap 的最大值
样例输入
10
样例输出
6
数据规模和约定
1 < n ≤ 1 e 6 1 < n \le 1e6 1<n≤1e6
样例说明
p = 2 p=2 p=2
a 0 = 10 , a 1 = 5 , a 2 = 1 , 6 = 5 + 1 a_0=10, a_1=5, a_2=1, 6=5+1 a0=10,a1=5,a2=1,6=5+1
解题思路
每次找最大那个约数相加
代码如下:
import java.util.*;
import java.io.*;
public class Main{
static int ans;
static void dfs(int x) {
if (x == 1) {
return ;
}
for (int i = 2; ; i ++ ) {
if (x % i == 0) {
ans += x/i;
dfs(x/i);
break;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(System.out);
int n = sc.nextInt();
dfs(n);
pw.println(ans);
pw.close();
}
}