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 安徽

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务