_无v名_ @ 2017-08-22 17:19:46
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
int n;
int a[4];
bool c(int x)
{
if(x==1||x==0) return false;
for(int i=2;i<=round(sqrt(x));i++)
if(x%i==0) return false;
return true;
}
void search(int x)
{
if(x==3)
{
a[3]=n-a[1]-a[2];
if(c(a[3]))
{cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;exit(0);}
}
else
for(int i=2;i<=n;i++)
{
if(c(i))
{
a[x]=i;search(x+1);
}
}
}
int main()
{
cin>>n;
search(1);
return 0;
}
by 起名真的很难 @ 2017-08-22 22:56:25
bool c(int x)
{
if(x==1||x==0) return false;
for(int i=2;i<=round(sqrt(x));i++)
if(x%i==0) return false;
return true;
}
这一段有点复杂了,但我估计不是这段的问题
bool c(int n)
{
for(int i=2;i<=floor(sqrt(n));i++)
if(!(n%i))return false;
return true;
}
by 起名真的很难 @ 2017-08-22 22:57:13
干脆给你个简单的代码吧
#include<bits/stdc++.h>
using namespace std;
int n;
int prime(int n)
{
for(int i=2;i<=sqrt(n);i++)
if(!(n%i))return 0;
return 1;
}
int main()
{
scanf("%d",&n);
for(int i=2;i<=n/3;i++)
for(int j=i;j<=n/3;j++)
if(prime(i)&&prime(j)&&prime(n-i-j))
{printf("%d %d %d",i,j,n-i-j);return 0;}
}