somer @ 2024-10-12 20:26:28
提交记录
代码:
#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必关!
by FFFuuuFFFuuu @ 2024-10-12 20:36:36
#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=1;j<=len && i*prime[j]<=n;j++){ // 将j从2改为1
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;
}
}
}
}
加油!
by FFFuuuFFFuuu @ 2024-10-12 20:37:47
@somer ```cpp
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=1;j<=len && iprime[j]<=n;j++){ // 将j从2改为1 flag[iprime[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; } } } }
by FFFuuuFFFuuu @ 2024-10-12 20:38:43
@somer sorry刚刚没at到
by somer @ 2024-10-12 20:41:29
@FFFuuuFFFuuu 谢谢thx (已关)