蓝桥杯 最大分解(清晰易懂)

资源限制

内存限制: 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<n1e6

样例说明

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();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取名真难www

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值