算法!俺要库库学!!
emm,先给代码!
#include<iostream>
#include<vector>
using namespace std;
const int N=20000;
vector<int>arr;
bool st[N];
bool is_prime(int x){
for(int i=2;i<=x/i;i++){
if(x%i==0){
return false;
}
}
return true;
}
int main(){
for(int i=2;i<N;i++){
if(!st[i]){
for(int j=i;j<N;j+=i){
st[j]=true;
}
arr.push_back(i);
}
}
int n,len=arr.size();
cin>>n;
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
for(int k=0;k<len;k++){
if(arr[i]+arr[j]+arr[k]==n){
cout<<arr[i]<<" "<<arr[j]<<" "<<arr[k]<<endl;
return 0;
}else if(arr[i]+arr[j]+arr[k]>n){
break;
}
}
}
}
return 0;
}
我在暴力中稍微添加了点智慧,题目大意就是给你个奇数,让你找三个质数相加为这个数,but,我没用奇数这个性质QAQ,我的代码是先找到题目给定范围内所有的质数(埃筛),然后通过枚举找到对应的三个数而且满足从小到大的顺序。
没想到这题怎么快就说完了,可能是太久没写算法题了,想的不多,近期的种种事件都证明算法是一个值得终身学习的东西,或者说多多少少都会用到。