P1579 哥德巴赫猜想(升级版)
Posted lijiahui-123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1579 哥德巴赫猜想(升级版)相关的知识,希望对你有一定的参考价值。
题解:
#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int a[20000]={0};
int i,j;
for(i=4;i<20000;i+=2){
a[i]=1;
}
for(i=3;i<sqrt(20000);i+=2){
for(j=i+2;j<20000;j+=2){
if(a[j]==0&&j%i==0){
a[j]=1;
}
}
}
// {
// for(i=2;i<1000;i++){
// if(a[i]==0){
// printf("%d ",i);
// }
// }
// }
int ret=0,p[10000];
for(i=2;i<20000;i++){
if(a[i]==0){
p[ret++]=i;
}
}
int k;
for(i=0;i<ret;i++){
for(j=0;j<ret;j++){
for(k=0;k<ret;k++){
if(p[i]+p[j]+p[k]==n){
printf("%d %d %d",p[i],p[j],p[k]);
goto out;
}
}
}
}
out:
return 0;
}
看到的一个较好的题解:
int main()
{
cin>>a;//读入
for (n1=2;n1<=a-4;n1++)//进入循环,寻找合适的数。
for (n2=2;n2<=a-4;n2++)//为了节省时间,只设置两层循环。
{
n3=a-n1-n2;//用前两个数求出第三个数。
if (zs(n1)+zs(n2)+zs(n3)!=0)//判断三数是否均为质数,否则直接跳过。
continue;
cout<<n1<<‘ ‘<<n2<<‘ ‘<<n3;//输出
return 0;
}
}
以上是关于P1579 哥德巴赫猜想(升级版)的主要内容,如果未能解决你的问题,请参考以下文章