拿糖果

阅读: 评论:0

拿糖果

拿糖果

问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉。
  假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
  现在小B希望知道最多可以拿多少糖。 输入格式 一个整数N 输出格式 最多可以拿多少糖
样例输入 15 样例输出 6 数据规模和约定 N <= 100000
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] dp = new int[n + 1];int[] x = new int[n + 1];//计算质数缓存int[] y = new int[n];//存放质数int cut = 0;for (int i = 2; i < x.length; i++) {if (x[i] == 0) {y[cut++] = i;if (i > 46341) {//Math.sqrt(Integer.MAX_VALUE)+1continue;//跳过循环,否则下面执行i*i将溢出}for (int j = i * i; j < x.length; j += i) {x[j] = 1;}}}for (int i = 4; i < dp.length; i++) {//i个糖果for (int j = 0; j < y.length; j++) {//拿y[j]个,下标从0开始if (y[j] * y[j] > i) {break;}if (i % y[j] == 0) {dp[i] = Math.max(dp[i], dp[i - 2 * y[j]] + y[j]);}}}System.out.println(dp[dp.length - 1]);}}


本文发布于:2024-01-30 20:41:33,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170661849422695.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:糖果
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23