2022年9月1日 哔哩哔哩基础架构第一批编程题:自然数

import java.util.*;
import java.lang.Math;

public class Main {

    public static void main(String[] args){
         Scanner in = new Scanner(System.in);
         int n = in.nextInt();
         int[] dp = new int[n+1];
         for(int i = 2; i <= n; i++){
             if(isPrime(i))  dp[i] = i;
         }
         int sum = 0;
         List<Integer> result = dfs(n, dp);
         for(int i = 0; i < result.size(); i++){
             sum += result.get(i);
         }
        System.out.println(sum);

    }
    public static List<Integer>  dfs(int n, int[] dp ){
        List<Integer> ans = new ArrayList<Integer>();
        if(dp[n] != 0){
            ans.add(dp[n]);
            return ans;
        }
        List<Integer> ansLeft  = new ArrayList<Integer>();
        List<Integer> ansright = new ArrayList<Integer>();

        int left = 0, right = 0;
        int mid = (int)Math.sqrt(n);

        for(int i = mid; i>=2; i--){
            if(n % i != 0){
                continue;
            }else {
                left = i;
                right = n / i;
                ansLeft  = dfs(left,  dp);
                ansright = dfs(right, dp);
                break;
            }
        }
        int sumLeft=0, sumRight = 0;
        for(int i=0;i<ansLeft.size();i++){
            int key = ansLeft.get(i);
            ans.add(key);
            sumLeft += key;
        }
        dp[left] = sumLeft;
        for(int i=0;i < ansright.size();i++){
            int key = ansright.get(i);
            ans.add(key);
            sumRight += key;
        }
        dp[right] = sumRight;
        return  ans;
    }

    public static boolean isPrime(int n){
        int a = (int) Math.sqrt(n);
        for(int i = a;i >= 2; i--){
            if(n % i == 0)  return false;
        }
        return  true;
    }

}

全部评论
兄弟,你的卷子有几道编程啊,我的编程跟这个好像一样
点赞 回复 分享
发布于 2022-09-01 20:18 安徽
利用完全平方公式分解因式,求出来的和就是最小的
点赞 回复 分享
发布于 2022-09-01 20:24 山东
Dp就行,跟剪绳子差不多
点赞 回复 分享
发布于 2022-09-01 20:53 辽宁
老哥们,请问有投OLAP的吗
点赞 回复 分享
发布于 2022-09-02 22:51 安徽

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务