/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-04-01 20:09:33
* @LastEditTime: 2022-04-01 20:27:28
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6;
int Prime[N];
bool isPrime[N];
long long int dp[N];
int n,cnt;
void GetPrime(){
memset(isPrime,1,sizeof(isPrime));
isPrime[1] = 0;
for(int i = 2;i <= n;i ++){
if(isPrime[i])
Prime[++cnt] = i;
for(int j = 1;j <= cnt&&i * Prime[j] <= n;j ++){
isPrime[i * Prime[j]] = 0;
if(i % Prime[j] == 0)
break;
}
}
}
int main()
{
cin >> n;
GetPrime();
dp[0] = 1;
for(int i = 2;i <= n;i ++)
if(isPrime[i])
for(int j = i;j <= n;j ++)
dp[j] += dp[j - i];
cout << dp[n];
}
P1832 A+B Problem(再升级)
最新推荐文章于 2025-02-05 17:09:55 发布
本文介绍了一个优化版的A+B问题解决方案,使用了质数筛法生成质数,并通过递归优化计算过程。程序首先初始化质数表,然后利用动态规划的方法计算出dp数组,最后输出dp[n]即为答案。这种方法展示了在高精度计算中如何高效地处理加法问题。
756

被折叠的 条评论
为什么被折叠?



