30分求调
查看原帖
30分求调
1269373
somer楼主2024/10/12 20:26

提交记录
代码:

#include<bits/stdc++.h>
using namespace std;
int prime[3005],flag[20005],len=0;
void pr(int n){//线性筛 
	for(int i=2;i<=n;i++){
		if(flag[i]==0) prime[++len]=i;
		for(int j=2;j<=len && i*prime[j]<=n;j++){
			flag[i*prime[j]]=1;
		}
	}
}
int main(){
	int n;
	scanf("%d",&n);
	pr(n);
	if(flag[n-4]==0){//特判 
		printf("2 2 %d",n-4);
		return 0;
	}
	for(int i=2;i<=len && prime[i]<=n/3;i++){//枚举 
		for(int j=i;j<=len && prime[j]<=(n-prime[i])/2;j++){
			if(flag[n-prime[i]-prime[j]]==0) printf("%d %d %d",prime[i],prime[j],n-prime[i]-prime[j]);
			return 0;
		}
	}
}

AC必关!

2024/10/12 20:26
加载中...