不懂就问 QaQ
  • 板块灌水区
  • 楼主j_steady
  • 当前回复11
  • 已保存回复11
  • 发布时间2022/7/17 11:17
  • 上次更新2023/10/27 19:54:56
查看原帖
不懂就问 QaQ
559503
j_steady楼主2022/7/17 11:17

P2563

#include <bits/stdc++.h>
using namespace std;
int n,dp[205],prime[205],t;
bool isprime[205];
void Euler(int n){
	t=0;
	memset(isprime,1,sizeof isprime);
	isprime[1]=0;
	for(int i=2;i<=n;i++){
		if(isprime[i]) {
			prime[++t] = i;
			dp[i] = 1;//sfaslgreg
		}
		for(int j=1;j<=t && i*prime[j]<=n;j++){
			isprime[i*prime[j]] = 0;
			if(i%prime[j] == 0) break;
		}
	} 
}
int main (){
	//dp[0] = 1;
	Euler(200);
	for(int j=1;j<=t;j++){
		for(int i=prime[j];i<=200;i++){
			dp[i] += dp[i-prime[j]];//*dp[prime[j]];
		}
	}
	while (cin >> n)
		cout << dp[n] << endl;	
	return 0;
} 

像12行那样初始化为什么不对。 且 这个的转移方程怎么得到的,我一开始是想dp[i] += dp[i-prime[j]*dp[prime[j]]

2022/7/17 11:17
加载中...