JXFCZX — 质数和分解(完全背包)
发布日期:2021-07-01 00:18:44 浏览次数:3 分类:技术文章

本文共 952 字,大约阅读时间需要 3 分钟。

题目链接:

时间:1 秒 空间:512 MB

问题描述

任何大于l的自然数n,都可以写成若干个大于等于2且小于等于n的质数之和的形式f(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。

例如9的质数和表达式就有四种本质不同的形式:9=2+5+2=2+3+2+2=3+3+3=2+7 。

这里所谓两个本质相同的表达式,是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。

试编程求解自然数n可以写成多少种本质不同的质数和的表达式。

输入格式

每一行存放一个自然数n(2≤n≤200)。

输出格式

输出自然数n的本质不同的质数和表达式的数目。

样例输入

2

200

样例输出

1

9845164

解题思路

先把素数筛出来,然后跑一遍完全背包就行了。

Accepted Code:

#include 
using namespace std;int isprime[205], prime[205], dp[205];void is_prime(int n) { int k = 0; for (int i = 2; i <= n; i++) isprime[i] = 1; for (int i = 2; i <= n; i++) { if (isprime[i]) { prime[k++] = i; for (int j = i << 1; j <= n; j += i) isprime[j] = 0; } }}int main() { int n; scanf("%d", &n); dp[0] = 1; is_prime(n); for (int i = 0; prime[i] && prime[i] <= n; i++) for (int j = prime[i]; j <= n; j++) dp[j] += dp[j - prime[i]]; printf("%d\n", dp[n]); return 0;}

转载地址:https://lzyws739307453.blog.csdn.net/article/details/91039810 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JXFCZX — 花店橱窗(动态规划)
下一篇:JXFCZX — 砝码称重1(DFS+背包)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月26日 17时28分44秒