3 条题解
-
2
已
WAAC, 放心食用#include <bits/stdc++.h> using namespace std; bool shift(int n)//判断质数 { for(int i = 2; i < n; i++) { if(n % i == 0)return false; } return true; } int main() { int n; cin >> n; for(int i = 2; i <= n - 2; i++)//枚举X1 { if(shift(i)) { for(int j = 2; j <= n - 4; j++)//枚举X2 { if(shift(j) && shift(n - i - j)) { cout << i << ' ' << j << ' ' << n - i - j; return 0; } } } } }
-
0
#include <bits/stdc++.h> using namespace std; int n; bool p(int x){ if (x<2){ return 0; } for (int i=2;i*i<=x;i++){ if (x%i==0){ return 0; } } return 1; } int main(){ cin>>n; for (int i=2;i<=n-4;i++){//暴力即可,注意剪枝 if (p(i)){ for (int j=i;j<=n-i-2;j++){ if (p(j)&&p(n-i-j)){//第三个数不用枚举 cout<<i<<" "<<j<<" "<<n-i-j<<endl; return 0; } } } } }
解释一下代码中循环的范围:为什么是 呢?因为 不是质数,那么拆分的每个数至少是 。要保证每个数至少是 第一个数最大只能到 ,其他两个数都是 。第二层循环范围同理。
- 1
信息
- ID
- 874
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 2
- 标签
- 递交数
- 34
- 已通过
- 24
- 上传者