样例都没过
查看原帖
样例都没过
1080250
littleFond楼主2024/9/5 19:39
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
bool isprime[114514];//false为质数
int prime[114514];
int n;
int cnt;
int dp[114514]={1};
void f(){
	isprime[0]=true;
	isprime[1]=true;
	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]]=true;
			if(i%prime[j]==0)break;
		}
	} 
} 
signed main(){
	f();
	cin>>n;
	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];
//	for(int i=0;i<=n;i++){
//		cout<<dp[i]<<" ";
//	}
	return 0;
}
2024/9/5 19:39
加载中...