美文网首页
质数分解2019

质数分解2019

作者: 巨鹿lx | 来源:发表于2020-04-06 11:48 被阅读0次

把2019分成若干个素数相加,求有多少种分法?
元素完全相同的算同一种方法,比如2+2017=2019和2017+2=2019

package DP;

public class 质数分解2019 {
    static long res = 0;
    static int primes[] = new int[2019];
    static long f[][] = new long[350][2100];
    public static void main(String[] args) {
        for (int i = 0; i < 350; i++) {
            for (int j = 0; j < 2100; j++) {
                f[i][j] = -1;
            }
        }
        int cnt = 0;
        for (int i = 2; i <= 2019; i++) {//初始化1~2019的所有素数
            if (isPrimes(i)) {
                primes[++cnt] = i;
            }
        }
        
        //记忆化搜索
        System.out.println(dfs(1, 2019));
        //一维DP
        dp_1D();
        //二维DP
        dp_2D();
        
    }
    private static void dp_2D() {
        long  a[][]= new long[307][2020];
        for(int i = 0; i <= 306; i ++) a[i][0] = 1;
        for(int i=1;i<=306;i++) {
           for(int j = 0; j <= 2019; j ++) {
               a[i][j] = a[i-1][j];
               if(j-primes[i]>=0) 
                   a[i][j] += a[i-1][j-primes[i]];
           }
        }
        long max = 0;
        for(int i = 1; i <=306; i++) {
            max = Math.max(max, a[i][2019]);
        }
        System.out.println(max);
    }
    private static void dp_1D() {
        long  a[]= new long[2020];
        a[0] = 1;
        for(int i=1;i<=306;i++) {
           for(int j = 2019  ; j >=0; j --) {
               if(j-primes[i]>=0) a[j] += a[j-primes[i]];
           }
        }
        System.out.println(a[2019]);
    }
    private static long dfs(int i, int j) {
        if (j == 0) return 1;
        if (i > 306 || j < primes[i])return 0;
        if (f[i][j] != -1)return f[i][j];
        
        f[i + 1][j-primes[i]]  = dfs(i + 1, j - primes[i]);
        
        f[i + 1][j] = dfs(i + 1, j); 
        
        return f[i][j] = f[i + 1][j-primes[i]] + f[i + 1][j];
    }

    private static boolean isPrimes(int x) {
        for (int i = 2; i <= x / i; i++) {
            if (x % i == 0)
                return false;
        }
        return true;
    }
}

相关文章

  • 质数分解2019

    把2019分成若干个素数相加,求有多少种分法?元素完全相同的算同一种方法,比如2+2017=2019和2017+2...

  • 质数刷题

    质数距离如何快速求解一个区间的所有质数。阶乘分解快速对整个阶乘质因数分解。判定1e18的质数直接使用Miller-...

  • 三升四数学(5)

    五,分解质因数 1.复习:质数与合数的概念,50以内,100以内的质数 2.把一个合数分解成若干个质数的乘积(小的...

  • 用python判断质数及其分解因数

    质数判断及其分解 楼主最近学习一小段时间python,在舍友的好奇下,写了一个python判断质数及其分解的代码 ...

  • 质因数分解-试除法

    算数基本定理任何一个大于1的正整数都能被唯一分解为有限个质数的乘积。其中是正整数,是质数,且满足试除法结合质数判定...

  • 判断质数,分解质因数

    C语言实现代码 素数的判断还有2到sqrt(a),加入头文件include 合数分解质因数(C++实现)

  • 分解质因数和应用

    分解质因数是什么分解质因数就是将一个合数分解成多个质数相乘的形式,这就是分解质因数。我举个最简单的例子,比如说4它...

  • 有意思的Linux小程序

    质因数分解 factor 任意大于1的自然数都可以分解成质数的乘积,且分解式唯一。 覆写文件防止恢复shred 如...

  • python入门级别算法系列 -1 分解质因数

    1.题目:分解质因数   将一个正整数分解质因数,即分解为由若干个质数相乘的结果,例如:输入90,打印出, 其中2...

  • 分解质因数

    问题描述 任何一个合数都可以写成几个质数相乘的形式,这几个质数叫做这个合数的质因数。编程实现分解质因数。 测试样例...

网友评论

      本文标题:质数分解2019

      本文链接:https://www.haomeiwen.com/subject/lhivphtx.html