版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/violinlove/article/details/82860604
暴力搜索,,,
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
inline int wread(){
char c=getchar ();int flag=1,wans=0;
while (c<'0'||c>'9'){if (c=='-') flag=-1;c=getchar ();}
while (c>='0'&&c<='9'){wans=wans*10+c-'0';c=getchar ();}
return wans*=flag;
}
int n,m;
bool jud[100009];
int Pri[100009],topp;
int Lin[7];
int cnt2[11][9002],top2[11];
// 3
int cnt34[11][11][1002],top34[11][11];
// 1 5
int cnt56[11][11][11][11][11],top56[11][11][11][11];
// 1 2 4 5
int cnt7[11][11][11][102],top7[11][11][11];
// 2 3 4
int cnt8910[11][11][11][102],top8910[11][11][11];
// 1 3 5
int cnt[11][11][11][11][11];
int beg[9005][6],topb,begnum[9005];
int sav[6][6];
bool F;
int ans;
struct node {int s1,s2,s3,s4,s5;}pr[10006];
bool e666 (node x,node y){
if (x.s1==y.s1) {
if (x.s2==y.s2){
if (x.s3==y.s3){
if (x.s4==y.s4){
return x.s5<y.s5;
}
else return x.s4<y.s4;
}
else return x.s3<y.s3;
}
else return x.s2<y.s2;
}
else return x.s1<y.s1;
}
void dfs (int stp){
if (stp==2){
for (int i=1;i<=top2[sav[3][3]];++i){
int nx(cnt2[sav[3][3]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]);swap(Lin[2],Lin[4]);
sav[5][1]=Lin[1];sav[4][2]=Lin[2];sav[2][4]=Lin[4];sav[1][5]=Lin[5];
dfs(3);
}
return ;
}
else if (stp==3){
for (int i=1; i<=top34[sav[1][1]][sav[5][1]]; ++i){
int nx(cnt34[sav[1][1]][sav[5][1]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]); swap(Lin[2],Lin[4]);
sav[2][1]=Lin[2];sav[3][1]=Lin[3];sav[4][1]=Lin[4];
dfs(4);
}
return ;
}
else if (stp==4){
for (int i=1; i<=top34[sav[1][5]][sav[5][5]]; ++i){
int nx(cnt34[sav[1][5]][sav[5][5]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]); swap(Lin[2],Lin[4]);
sav[2][5]=Lin[2];sav[3][5]=Lin[3];sav[4][5]=Lin[4];
dfs(5);
}
return ;
}
else if (stp==5){
for (int i=1; i<=top56[sav[2][1]][sav[2][2]][sav[2][4]][sav[2][5]]; ++i){
int nx(cnt56[sav[2][1]][sav[2][2]][sav[2][4]][sav[2][5]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
sav[2][3]=Lin[3];
dfs(6);
}
return ;
}
else if (stp==6){
for (int i=1; i<=top56[sav[4][1]][sav[4][2]][sav[4][4]][sav[4][5]]; ++i){
int nx(cnt56[sav[4][1]][sav[4][2]][sav[4][4]][sav[4][5]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
sav[4][3]=Lin[3];
dfs(7);
}
return ;
}
else if (stp==7){
for (int i=1; i<=top7[sav[2][3]][sav[3][3]][sav[4][3]]; ++i){
int nx(cnt7[sav[2][3]][sav[3][3]][sav[4][3]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]); swap(Lin[2],Lin[4]);
sav[1][3]=Lin[1];sav[5][3]=Lin[5];
dfs(8);
}
return ;
}
else if (stp==8){
for (int i=1; i<=top8910[sav[1][1]][sav[1][3]][sav[1][5]]; ++i){
int nx(cnt8910[sav[1][1]][sav[1][3]][sav[1][5]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]); swap(Lin[2],Lin[4]);
sav[1][2]=Lin[2];sav[1][4]=Lin[4];
dfs(9);
}
return ;
}
else if (stp==9){
for (int i=1; i<=top8910[sav[3][1]][sav[3][3]][sav[3][5]]; ++i){
int nx(cnt8910[sav[3][1]][sav[3][3]][sav[3][5]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]); swap(Lin[2],Lin[4]);
sav[3][2]=Lin[2];sav[3][4]=Lin[4];
dfs(10);
}
return ;
}
else if (stp==10){
for (int i=1; i<=top8910[sav[5][1]][sav[5][3]][sav[5][5]]; ++i){
int nx(cnt8910[sav[5][1]][sav[5][3]][sav[5][5]][i]);
// printf("%d\n",nx);
// system ("pause");
int lintop(0);
while (nx){
lintop++;
Lin[lintop]=nx%10;
nx/=10;
}
swap (Lin[1],Lin[5]); swap(Lin[2],Lin[4]);
sav[5][2]=Lin[2];sav[5][4]=Lin[4];
dfs(11);
}
return ;
}
else if (stp==11){
for (int i=1;i<=5;++i)
if (cnt[sav[i][1]][sav[i][2]][sav[i][3]][sav[i][4]][sav[i][5]]==-1) return ;
for (int i=1;i<=5;++i)
if (cnt[sav[1][i]][sav[2][i]][sav[3][i]][sav[4][i]][sav[5][i]]==-1) return ;
++ans;
int s1(0),s2(0),s3(0),s4(0),s5(0);
for (int i=1;i<=5;++i){
for (int j=1;j<=5;++j){
if (i==1)
s1+=sav[i][j]*pow(10,5-j);
else if (i==2)
s2+=sav[i][j]*pow(10,5-j);
else if (i==3)
s3+=sav[i][j]*pow(10,5-j);
else if (i==4)
s4+=sav[i][j]*pow(10,5-j);
else if (i==5)
s5+=sav[i][j]*pow(10,5-j);
}
}
pr[ans]=(node){s1,s2,s3,s4,s5};
}
return ;
}
void clear_mem(){
memset (cnt,-1,sizeof cnt);
}
int main (){
n=wread();m=wread();
memset (jud,true,sizeof jud);
jud[1]=false;
for (int i(2);i<=99999;++i){
if (jud[i]) Pri[++topp]=i;
for (int j(1);j<=topp && Pri[j]*i<=99999;++j){
jud[Pri[j]*i]=false;
if (i%Pri[j]==0) break;
}
}
clear_mem();
for (int i=10000;i<=99999;++i){
if (jud[i]) {
int nx=i;
int lintop(0);
int sum(0);
while (nx){
++lintop;
Lin[lintop]=nx%10;
sum+=Lin[lintop];
nx/=10;
}
if (sum!=n) {jud[i]=false;continue;}
swap(Lin[1],Lin[5]);swap(Lin[2],Lin[4]);
// printf("%d ",i);
// for (int j=1;j<=5;++j){
// printf("%d",Lin[j]);
// }puts("");
// system ("pause");
cnt2[Lin[3]][++top2[Lin[3]]]=i;
cnt34[Lin[1]][Lin[5]][++top34[Lin[1]][Lin[5]]]=i;
cnt56[Lin[1]][Lin[2]][Lin[4]][Lin[5]][++top56[Lin[1]][Lin[2]][Lin[4]][Lin[5]]]=i;
cnt7[Lin[2]][Lin[3]][Lin[4]][++top7[Lin[2]][Lin[3]][Lin[4]]]=i;
cnt8910[Lin[1]][Lin[3]][Lin[5]][++top8910[Lin[1]][Lin[3]][Lin[5]]]=i;
cnt[Lin[1]][Lin[2]][Lin[3]][Lin[4]][Lin[5]]=i;
++topb;
for (int j(1);j<=5;++j)
beg[topb][j]=Lin[j];
begnum[topb]=i;
}
}
for (int A(1);A<=topb;++A){
memset (sav,0,sizeof sav);
sav[1][1]=beg[A][1];
if (sav[1][1]<m) continue;
if (sav[1][1]>m) break;
sav[2][2]=beg[A][2];
sav[3][3]=beg[A][3];
sav[4][4]=beg[A][4];
sav[5][5]=beg[A][5];
F=true;
dfs (2);
}
// for (int i=1;i<=ans;++i){
// printf("%d %d %d %d %d\n",pr[i].s1,pr[i].s2,pr[i].s3,pr[i].s4,pr[i].s5);
// }
if (!ans){
puts("NONE");return 0;
}
sort(pr+1,pr+ans+1,e666);
for (int i=1;i<=ans;++i){
printf("%d\n%d\n%d\n%d\n%d\n",pr[i].s1,pr[i].s2,pr[i].s3,pr[i].s4,pr[i].s5);
puts("");
}
return 0;
}