题目链接:点击打开链接
题目大意:把一个大于6的数拆成三个质数的和。
题目思路:拆成质数的和...哥德巴赫猜想....任何一个大于等于4的偶数都能写成两个质数的和.....恩没错,遇到偶数先减2,遇到奇数先减3就能转换成我们这个强大的哥德巴赫猜想了然后就很美滋滋的暴力就行了。时间复杂度理论上是nsqrt(n)但是实际上你只要找到一个就可以break了,不用全搞一遍,所以实际上还是很稳的。
以下是代码:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
using namespace std;
int prime(int x){
if(x<2){
return 0;
}
for(int i=2;i<=sqrt(x);i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int main(){
int x,y,z,n;
while(~scanf("%d",&n)){
if(n%2==0){
printf("2 ");
n-=2;
}
else{
printf("3 ");
n-=3;
}
for(int i=2;;i++){
if(prime(i)&&prime(n-i)){
printf("%d %d\n",i,n-i);
break;
}
}
}
return 0;
}