绝望读代码,应该没有人会耐着性子看我又臭又长的代码QAQ
查看原帖
绝望读代码,应该没有人会耐着性子看我又臭又长的代码QAQ
122342
今夕何年楼主2022/5/9 21:04
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<limits.h>
#include<algorithm>
#include<iomanip>
#include<stdlib.h>
using namespace std;

const unsigned MAXN=4294967290;//本来开const long long 结果一直是大串怪异报错信息
//const int MAXN2=10000;//本来也是const long long
bool isprime[MAXN];
int prime[MAXN];
int indexs[MAXN];//记录素数索引,即素数是第几个 
int a,b;
bool up_key;//用up_key 判断升序降序 
int ans[35];//其中ans[0]记录当前列表内元素个数 
int cnt=0;
bool ans_key=false;
int max_prime,min_prime,max_index,min_index;

void euler_prime(){
	memset(isprime,true,sizeof(isprime));
	memset(prime,0,sizeof(prime));
	isprime[1]=0;
	for(unsigned i=2;i<=MAXN;++i){
		if(isprime[i])prime[++prime[0]]=i;
		for(int j=1;j<=prime[0];++j){
			if(i*prime[j]>MAXN)break;
			isprime[i*prime[j]]=false;
			if(i%prime[j]==0)break;
		}
	}
}//O(n)筛素数 
//将素数表记录在prime数组中,将数的信息记录在isprime数组中 

void dfs(){
	if(ans[0]>30)return;
	int first_prime=ans[ans[0]-1];//first是指倒数第二个数 
	int first_index=indexs[first_prime];
	for(int i=first_index+1;i<max_index;++i){
		if(isprime[prime[i]-first_prime]){
			if(isprime[max_prime-prime[i]]){
				ans_key=true;
				return;
			}
            ++ans[0];
			ans[ans[0]]=ans[ans[0]-1];
			ans[ans[0]-1]=prime[i];
			dfs();
			if(ans_key)return;
            --ans[0];
			ans[ans[0]]=ans[ans[0]+1];
		}
	} 
	
}

void cout_ans(){
	if(ans_key){
		cout<<ans[0]<<endl;
		if(up_key){	
			for(int i=1;i<=ans[0];++i){
				cout<<ans[i]<<" ";
			}
		}else{
			for(int i=ans[0];i>=1;--i){
				cout<<ans[i]<<" ";
			}
		}
	}else{
		cout<<-1;
	}
}

int main(){
	cin>>a>>b;
	up_key=a>b?false:true;
	euler_prime(); 
	for(int i=2;i<=10000;++i){
		if(isprime[i])indexs[i]=++cnt;
	}
	
	if(up_key){
		max_prime=b;
		min_prime=a;
		max_index=indexs[b];
		min_index=indexs[a];
	}else{
		max_prime=a;
		min_prime=b;
		max_index=indexs[a];
		min_index=indexs[b];
	}
	ans[1]=min_prime;
	ans[2]=max_prime;
	ans[0]=2;//前列表内元素个数
    if(isprime[abs(ans[2]-ans[1])]){
    	ans_key=true;
    	cout<<"=====";
    	goto cout_anss;
	}
	dfs();
cout_anss:
	cout_ans();
	return 0;
} 

欲哭无泪哭死我了,仅以此证明我来过,怎敢奢望有大犇能抽时间看看这一团老太太裹脚布--又臭又长的代码呢?QAQ

2022/5/9 21:04
加载中...