社区讨论

蒟蒻求助

P1579哥德巴赫猜想(升级版)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi6v2xom
此快照首次捕获于
2025/11/20 11:18
4 个月前
此快照最后确认于
2025/11/20 11:18
4 个月前
查看原帖
想用广搜暴力枚举但是怎么就炸了,dalao们能不能帮我看看代码哪里错了 QAQ (献上膝盖)
CPP
#include<iostream>
#include<cmath>
using namespace std;
int n,sum;
int p;
int num[99999];
//素数判断 
int ss(int j)
{
   for(int i=2;i<=sqrt(j);i++){
   	if(!(j%i)){
   		return 0;
   		//break;
   	}
   }
   return 1;
}
int main()
{
   cin>>n;
   int head=0,tail=1,len=1;
   
   //企图广搜一下,但是炸了。 
   int h[99999][4];
   h[1][0]=2;  //存当前的总和 
   h[1][1]=len;   //存当前长度 
   h[1][2]=0;     //存前一个数的位置 
   h[1][3]=2;    //存 当前的数 
   //初始化 
   //num[1]=2;
   do
   {
   	head++;
   	for(int i=2;i<n;i++){   //从2 开始枚举 
   		if(h[tail][0]<n&&h[tail][1]<3){     //判断当前长度是否为 3 同时当前总和 是否为n 
   			if(ss(i)){
   				tail++;
   				//num[tail]=i;
   				h[tail][0]=i+h[head][0];         
   				h[tail][1]=h[head][1]++;         //存数 
   				h[tail][2]=head;
   				h[tail][3]=i;
   				if(h[tail][1]==3&&h[tail][0]==n){  //判断加上一个数后是否长度为 3   总和 是否等于n 
   					p=tail;     //存下当前坐标 
   					break;            //结束枚举 
   				}
   			}
   		}
   	}
   	if(p) break; 
   }while(head<tail);
   int x,y,z;
   //z=num[p];
   //y=num[h[p][2]];
   //x=num[h[h[p][2]][2]];
   z=h[p][3];
   y=h[h[p][2]][3];     //输出 
   x=h[h[h[p][2]][2]][3];
   cout<<x<<" "<<y<<" "<<z;
   return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...