不想再优化去除重复结果了
#include <bits/stdc++.h>
#include <vector>
using namespace std;
typedef struct num1_num2
{
int num1;
int num2;
}num1_num2;
typedef struct num_info
{
int num;
vector<num1_num2> son;
}num_info;
vector<num_info> a;
int judge(int n)
{
//若为素数则返回1,否则返回0
for(int i=2;i<n;i++)
{
if(n%i==0) return 0;
}
return 1;
}
void get_i_son(int n)
{
num_info temp;
temp.num=n;
for(int i=2;i<=n/2;i++)
{
if(judge(i)==1&&judge(n-i)==1)
{
num1_num2 a_b;
a_b.num1=i;
a_b.num2=n-i;
temp.son.push_back(a_b);
}
}
a.push_back(temp);
}
typedef struct result
{
int d;
int num;
}result;
vector<result> res;
void add(int n)
{
int flag=0;
for(int i=0;i<res.size();i++)
{
if(res[i].d==n)
{
res[i].num++;
flag=1;
break;
}
}
if(flag==0)
{
result temp;
temp.d=n;
temp.num=1;
res.push_back(temp);
}
}
void sub(int n)
{
int flag=0;
for(int i=0;i<res.size();i++)
{
if(res[i].d==n)
{
res[i].num--;
if(res[i].num==0)
{
res.erase(res.begin()+i);
}
flag=1;
break;
}
}
}
bool cmp(result a,result b)
{
if(a.num==b.num)
{
if(a.d>b.d)
{
return true;
}
else
{
return false;
}
}
if(a.num>b.num)
{
return true;
}
else
{
return false;
}
}
void dicar(int k)
{
if(k>=a.size())
{
sort(res.begin(),res.end(),cmp);
for(int i=0;i<res.size();i++)
{
if(i<res.size()-1) printf("%d %d,",res[i].d,res[i].num);
else printf("%d %d",res[i].d,res[i].num);
}
cout<<endl;
return ;
}
for(int i=0;i<a[k].son.size();i++)
{
add(a[k].son[i].num1);
add(a[k].son[i].num2);
dicar(k+1);
sub(a[k].son[i].num1);
sub(a[k].son[i].num2);
}
}
int main(int argc, char** argv) {
//从m到n遍历每个偶数
//每个偶数求出所有的和
int m,n;
cin>>m>>n;
for(int i=m;i<=n;i++)
{
if(i%2!=0) continue;
get_i_son(i);
}
//排列组合
dicar(0);
return 0;
}